Skip to content

Commit 3c295dd

Browse files
authored
Merge pull request #76 from vmarchaud/master
add the deletion of an item + some rewrite of exception handling
2 parents 3a84f59 + 31ec05c commit 3c295dd

File tree

9 files changed

+338
-165
lines changed

9 files changed

+338
-165
lines changed

src/main/java/com/pokegoapi/api/inventory/Bag.java

+39-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@
22

33
import POGOProtos.Inventory.ItemIdOuterClass.ItemId;
44
import POGOProtos.Inventory.ItemOuterClass;
5+
import POGOProtos.Networking.Requests.RequestTypeOuterClass;
6+
import POGOProtos.Networking.Requests.Messages.RecycleInventoryItemMessageOuterClass;
7+
import POGOProtos.Networking.Responses.FortDetailsResponseOuterClass;
8+
import POGOProtos.Networking.Responses.RecycleInventoryItemResponseOuterClass;
9+
import POGOProtos.Networking.Responses.RecycleInventoryItemResponseOuterClass.RecycleInventoryItemResponse.Result;
10+
11+
import com.google.protobuf.InvalidProtocolBufferException;
512
import com.pokegoapi.api.PokemonGo;
13+
import com.pokegoapi.exceptions.LoginFailedException;
14+
import com.pokegoapi.exceptions.RemoteServerException;
15+
import com.pokegoapi.main.ServerRequest;
616

717
import java.util.HashMap;
818

@@ -18,15 +28,39 @@ public Bag(PokemonGo pgo) {
1828
public void addItem(Item item) {
1929
items.put(item.getItemId(), item);
2030
}
31+
32+
public Result removeItem(ItemId id, int quantity) throws RemoteServerException, LoginFailedException {
33+
Item item = getItem(id);
34+
if (item.getCount() < quantity)
35+
throw new IllegalArgumentException("You cannont remove more quantity than you have");
36+
37+
RecycleInventoryItemMessageOuterClass.RecycleInventoryItemMessage msg = RecycleInventoryItemMessageOuterClass.RecycleInventoryItemMessage.newBuilder()
38+
.setItemId(id).setCount(quantity).build();
39+
40+
ServerRequest serverRequest = new ServerRequest(RequestTypeOuterClass.RequestType.RECYCLE_INVENTORY_ITEM, msg);
41+
pgo.getRequestHandler().request(serverRequest);
42+
pgo.getRequestHandler().sendServerRequests();
43+
44+
RecycleInventoryItemResponseOuterClass.RecycleInventoryItemResponse response = null;
45+
try {
46+
response = RecycleInventoryItemResponseOuterClass.RecycleInventoryItemResponse.parseFrom(serverRequest.getData());
47+
} catch (InvalidProtocolBufferException e) {
48+
throw new RemoteServerException(e);
49+
}
50+
51+
if (response.getResult() == RecycleInventoryItemResponseOuterClass.RecycleInventoryItemResponse.Result.SUCCESS)
52+
item.setCount(response.getNewCount());
53+
return response.getResult();
54+
}
2155

2256
public Item getItem(ItemId type) {
23-
if (type == ItemId.UNRECOGNIZED) {
57+
if (type == ItemId.UNRECOGNIZED)
2458
throw new IllegalArgumentException("You cannot get item for UNRECOGNIZED");
25-
}
26-
if (!items.containsKey(type)) {
27-
// prevent returning null
59+
60+
// prevent returning null
61+
if (!items.containsKey(type))
2862
return new Item(ItemOuterClass.Item.newBuilder().setCount(0).setItemId(type).build());
29-
}
63+
3064
return items.get(type);
3165
}
3266
}

src/main/java/com/pokegoapi/api/inventory/Item.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@
55

66
public class Item {
77
private POGOProtos.Inventory.ItemOuterClass.Item proto;
8+
private int count;
89

910
public Item(POGOProtos.Inventory.ItemOuterClass.Item proto) {
1011
this.proto = proto;
12+
this.count = proto.getCount();
1113
}
1214

1315
public ItemId getItemId() {
1416
return proto.getItemId();
1517
}
1618

1719
public int getCount() {
18-
return proto.getCount();
20+
return count;
21+
}
22+
23+
public void setCount(int count) {
24+
this.count = count;
1925
}
2026

2127
public boolean isUnseen() {

src/main/java/com/pokegoapi/api/inventory/EvolutionResult.java renamed to src/main/java/com/pokegoapi/api/map/Pokemon/EvolutionResult.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.pokegoapi.api.inventory;
1+
package com.pokegoapi.api.map.Pokemon;
22

33
import POGOProtos.Networking.Responses.EvolvePokemonResponseOuterClass;
44
import com.pokegoapi.api.pokemon.Pokemon;

src/main/java/com/pokegoapi/api/pokemon/Pokemon.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import POGOProtos.Networking.Responses.ReleasePokemonResponseOuterClass.ReleasePokemonResponse.Result;
1515
import com.google.protobuf.InvalidProtocolBufferException;
1616
import com.pokegoapi.api.PokemonGo;
17-
import com.pokegoapi.api.inventory.EvolutionResult;
17+
import com.pokegoapi.api.map.Pokemon.EvolutionResult;
1818
import com.pokegoapi.exceptions.LoginFailedException;
1919
import com.pokegoapi.exceptions.RemoteServerException;
2020
import com.pokegoapi.main.ServerRequest;

src/main/java/com/pokegoapi/api/pokemon/PokemonFamilyMap.java

+250-156
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package com.pokegoapi.exceptions;
22

33
public class InvalidCurrencyException extends Exception {
4+
public InvalidCurrencyException() {
5+
super();
6+
}
47

8+
public InvalidCurrencyException(String reason) {
9+
super(reason);
10+
}
11+
12+
public InvalidCurrencyException(Exception e) {
13+
super(e);
14+
}
515
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package com.pokegoapi.exceptions;
22

33
public class LoginFailedException extends Exception {
4+
public LoginFailedException() {
5+
super();
6+
}
47

8+
public LoginFailedException(String reason) {
9+
super(reason);
10+
}
11+
12+
public LoginFailedException(Exception e) {
13+
super(e);
14+
}
515
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package com.pokegoapi.exceptions;
22

33
public class NoSuchItemException extends Exception {
4+
public NoSuchItemException() {
5+
super();
6+
}
47

8+
public NoSuchItemException(String reason) {
9+
super(reason);
10+
}
11+
12+
public NoSuchItemException(Exception e) {
13+
super(e);
14+
}
515
}

src/main/java/com/pokegoapi/main/RequestHandler.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import POGOProtos.Networking.Envelopes.AuthTicketOuterClass;
44
import POGOProtos.Networking.Envelopes.RequestEnvelopeOuterClass;
5+
import POGOProtos.Networking.Envelopes.RequestEnvelopeOuterClass.RequestEnvelope.AuthInfo;
56
import POGOProtos.Networking.Envelopes.ResponseEnvelopeOuterClass;
67
import com.google.protobuf.ByteString;
78
import com.pokegoapi.api.PokemonGo;
@@ -70,12 +71,15 @@ public void sendServerRequests() throws RemoteServerException, LoginFailedExcept
7071
throw new RemoteServerException(e);
7172
}
7273

74+
if (response.code() != 200)
75+
throw new RemoteServerException("Got a unexcepted http code : " + response.code());
76+
7377
ResponseEnvelopeOuterClass.ResponseEnvelope responseEnvelop = null;
7478
try (InputStream content = response.body().byteStream()) {
7579
responseEnvelop = ResponseEnvelopeOuterClass.ResponseEnvelope.parseFrom(content);
7680
} catch (IOException e) {
7781
// retrieved garbage from the server
78-
throw new RemoteServerException("Received malformed response");
82+
throw new RemoteServerException("Received malformed response : " + e);
7983
}
8084

8185
if (responseEnvelop.getApiUrl() != null && responseEnvelop.getApiUrl().length() > 0) {
@@ -127,6 +131,11 @@ public RequestEnvelopeOuterClass.RequestEnvelope build() {
127131
throw new IllegalStateException("Attempting to send request envelop with no requests");
128132
return builder.build();
129133
}
134+
135+
public void setAuthInfo(AuthInfo auth) {
136+
this.auth = auth;
137+
this.lastAuth = null;
138+
}
130139

131140
public void setLatitude(double latitude) {
132141
builder.setLatitude(latitude);

0 commit comments

Comments
 (0)