@@ -124,11 +124,17 @@ public Map<Integer, Integer> saveAndDeduplicate(Context context, SQLiteDatabase
124124 Set <String > existingImages = DBHelper .imageFiles (context , database );
125125
126126 for (LoyaltyCard card : data .cards ) {
127- LoyaltyCard existing = DBHelper .getLoyaltyCard (context , database , card .id );
128- if (existing == null ) {
129- DBHelper .insertLoyaltyCard (database , card .id , card .store , card .note , card .validFrom , card .expiry , card .balance , card .balanceType ,
130- card .cardId , card .barcodeId , card .barcodeType , card .headerColor , card .starStatus , card .lastUsed , card .archiveStatus );
131- } else if (!isDuplicate (context , existing , card , existingImages , imageChecksums )) {
127+ List <LoyaltyCard > candidates = DBHelper .getLoyaltyCardsByCardId (context , database , card .cardId );
128+ boolean duplicateFound = false ;
129+
130+ for (LoyaltyCard existing : candidates ) {
131+ if (isDuplicate (context , existing , card , existingImages , imageChecksums )) {
132+ duplicateFound = true ;
133+ break ;
134+ }
135+ }
136+
137+ if (!duplicateFound ) {
132138 long newId = DBHelper .insertLoyaltyCard (database , card .store , card .note , card .validFrom , card .expiry , card .balance , card .balanceType ,
133139 card .cardId , card .barcodeId , card .barcodeType , card .headerColor , card .starStatus , card .lastUsed , card .archiveStatus );
134140 idMap .put (card .id , (int ) newId );
@@ -156,14 +162,16 @@ public boolean isDuplicate(Context context, final LoyaltyCard existing, final Lo
156162 return false ;
157163 }
158164 for (ImageLocationType imageLocationType : ImageLocationType .values ()) {
159- String name = Utils .getCardImageFileName (existing .id , imageLocationType );
160- boolean exists = existingImages .contains (name );
161- if (exists != imageChecksums .containsKey (name )) {
165+ String nameExists = Utils .getCardImageFileName (existing .id , imageLocationType );
166+ String nameChecksum = nameExists .replaceFirst ("card_\\ d+_" , "card_" + card .id + "_" );
167+
168+ boolean exists = existingImages .contains (nameExists );
169+ if (exists != imageChecksums .containsKey (nameChecksum )) {
162170 return false ;
163171 }
164172 if (exists ) {
165- File file = Utils .retrieveCardImageAsFile (context , name );
166- if (!imageChecksums .get (name ).equals (Utils .checksum (new FileInputStream (file )))) {
173+ File file = Utils .retrieveCardImageAsFile (context , nameExists );
174+ if (!imageChecksums .get (nameChecksum ).equals (Utils .checksum (new FileInputStream (file )))) {
167175 return false ;
168176 }
169177 }
0 commit comments