55import java .io .IOException ;
66import java .util .ArrayList ;
77import java .util .Currency ;
8+ import java .util .EnumMap ;
89import java .util .List ;
10+ import java .util .Map ;
911import java .util .NavigableMap ;
1012import java .util .TreeMap ;
1113
1214import org .apache .logging .log4j .Logger ;
13- import org .api .mkm .tools .MkmConstants ;
1415import org .magic .api .beans .MTGCard ;
1516import org .magic .api .beans .MTGPrice ;
1617import org .magic .api .interfaces .abstracts .extra .AbstractMTGJsonProvider ;
3435public class MTGJsonPricerProvider {
3536 public enum SUPPORT {PAPER ,MTGO }
3637 public enum STOCK {RETAIL , BUYLIST }
37- public enum VENDOR {CARDKINGDOM ,TCGPLAYER ,CARDHOARDER ,CARDMARKET ,CARDSPHERE }
38+ public enum VENDOR {CARDKINGDOM ,TCGPLAYER ,CARDHOARDER ,CARDMARKET ,CARDSPHERE , MANAPOOL }
3839
39- private List <Data > caches ;
40+ private Map < VENDOR , List <Data > > caches ;
4041 private static MTGJsonPricerProvider inst ;
4142
4243 protected Logger logger = MTGLogger .getLogger (this .getClass ());
@@ -48,7 +49,9 @@ public enum VENDOR {CARDKINGDOM,TCGPLAYER,CARDHOARDER,CARDMARKET,CARDSPHERE}
4849 public MTGJsonPricerProvider () throws IOException {
4950
5051 gson = new GsonBuilder ().setPrettyPrinting ().create ();
51-
52+
53+ caches = new EnumMap <>(VENDOR .class );
54+
5255
5356 if (!dataFile .exists ())
5457 downloadDataFile ();
@@ -62,7 +65,6 @@ public static MTGJsonPricerProvider getInstance() throws IOException
6265 return inst ;
6366 }
6467
65-
6668 public Meta getVersion ()
6769 {
6870 try (var reader = new JsonReader (new FileReader (dataFile )))
@@ -177,11 +179,6 @@ public List<Data> loadData(VENDOR v) throws IOException
177179 {
178180 File f = new File (MTGConstants .DATA_DIR .getAbsolutePath (),v .name ()+".json" );
179181
180-
181- if (caches ==null )
182- caches = new ArrayList <>();
183-
184-
185182 if (f .exists ())
186183 {
187184 int lastModif = FileTools .daysBetween (f );
@@ -202,14 +199,18 @@ public List<Data> loadData(VENDOR v) throws IOException
202199 logger .error ("{} doesn't existe. running buildPrices({})" ,f .getAbsolutePath (),v );
203200 buildPrices (v );
204201 }
205-
202+ logger .debug ("Filling cache for {}" , v );
203+
206204 try (var reader = new FileReader (f ))
207205 {
208206 var el = JsonParser .parseReader (reader ).getAsJsonArray ();
209- el .forEach (e ->caches .add (gson .fromJson (e ,Data .class )));
207+
208+ for (var e : el )
209+ caches .computeIfAbsent (v , _ ->new ArrayList <Data >()).add (gson .fromJson (e ,Data .class ));
210210 }
211+ logger .debug ("Filling cache for {} done" , v );
211212 }
212- return caches ;
213+ return caches . get ( v ) ;
213214 }
214215
215216 private Currency getCurrencyFor (VENDOR v )
@@ -220,19 +221,19 @@ private Currency getCurrencyFor(VENDOR v)
220221 return Currency .getInstance ("USD" );
221222 }
222223
223- public List <MTGPrice > getPriceFor (MTGCard card ) {
224- List < MTGPrice > ret = new ArrayList <>();
224+ public List <MTGPrice > getPriceFor (MTGCard card , VENDOR v ) {
225+ var ret = new ArrayList <MTGPrice >();
225226 Data d ;
226227 try {
227- d = loadData (VENDOR . CARDMARKET ).stream ().filter (i ->i .getMtgjsonId ().equals (card .getId ())).findFirst ().orElse (null );
228+ d = loadData (v ).stream ().filter (i ->i .getMtgjsonId ().equals (card .getId ())).findFirst ().orElse (null );
228229 logger .debug ("data = {}" , d );
229230 } catch (Exception e ) {
230231 logger .error (e );
231232 return ret ;
232233 }
233234 if (d ==null )
234235 {
235- logger .warn ("MTGJson found nothing for {}" ,card );
236+ logger .warn ("{} found nothing for {}" , v ,card );
236237 return ret ;
237238 }
238239
@@ -243,9 +244,8 @@ public List<MTGPrice> getPriceFor(MTGCard card) {
243244 mp .setCountry ("None" );
244245 mp .setCurrency ("EUR" );
245246 mp .setCardData (card );
246- mp .setSeller ("Mkm" );
247- mp .setSite ("Mkm" );
248- mp .setUrl (MkmConstants .MKM_SITE_URL );
247+ mp .setSeller (v .name ());
248+ mp .setSite (v .name ());
249249 mp .setFoil (b );
250250 mp .setValue (d .listPricesByFoil (b ).get (0 ).getStockPrices ().lastEntry ().getValue ());
251251 ret .add (mp );
@@ -257,7 +257,7 @@ public List<MTGPrice> getPriceFor(MTGCard card) {
257257 }
258258 }
259259
260- logger .debug ("MTGJson found {} prices" ,ret .size ());
260+ logger .debug ("{} found {} prices" , v ,ret .size ());
261261 return ret ;
262262 }
263263
0 commit comments