23
23
import android .content .SharedPreferences ;
24
24
import android .database .Cursor ;
25
25
import android .database .DatabaseUtils ;
26
+ import android .database .sqlite .SQLiteConstraintException ;
26
27
import android .database .sqlite .SQLiteDatabase ;
27
28
import android .database .sqlite .SQLiteStatement ;
28
29
import android .net .Uri ;
@@ -614,7 +615,7 @@ public static int updateMediaCopy(
614
615
SharedPreferences prefsInstance = PreferenceManager
615
616
.getDefaultSharedPreferences (context .getApplicationContext ());
616
617
long maxDateAddedSecs = prefsInstance .getLong ("maxDateAddedSecs" , 0l );
617
- return updateMediaCopy (context , db , null , new Date (maxDateAddedSecs ), progessListener );
618
+ return updateMediaCopy (context , db , null , new Date (maxDateAddedSecs * FotoSql . LAST_MODIFIED_FACTOR ), progessListener );
618
619
}
619
620
620
621
public static int updateMediaCopy (
@@ -627,7 +628,7 @@ public static int updateMediaCopy(
627
628
628
629
Calendar nextMonth = Calendar .getInstance ();
629
630
nextMonth .add (Calendar .MONTH , 1 );
630
- nextMonthTimeInSecs = nextMonth .getTimeInMillis () / 1000 ;
631
+ nextMonthTimeInSecs = nextMonth .getTimeInMillis () / FotoSql . LAST_MODIFIED_FACTOR ;
631
632
632
633
long filterLastUpdateMinInMillis = (filterLastUpdateMin != null ) ? (filterLastUpdateMin .getTime ()) : 0L ;
633
634
if (filterLastUpdateMinInMillis != 0 ) {
@@ -668,24 +669,31 @@ public static int updateMediaCopy(
668
669
if (curDateAddedSecs > maxDateAddedSecs ) {
669
670
maxDateAddedSecs = curDateAddedSecs ;
670
671
}
671
- isUpdate = (curDateAddedSecs <= filterLastUpdateMinInMillis / 1000 );
672
+ isUpdate = (curDateAddedSecs <= filterLastUpdateMinInMillis / FotoSql . LAST_MODIFIED_FACTOR );
672
673
673
674
long curDateUpdatedSecs = getDateInSecs (c , colLAST_MODIFIED );
674
675
if (curDateUpdatedSecs > maxDateUpdatedSecs ) {
675
676
maxDateUpdatedSecs = curDateUpdatedSecs ;
676
677
}
677
678
678
679
if (isUpdate ) {
679
- updateCount ++;
680
680
lastSql = sqlUpdate ;
681
681
isUpdate = bindAndExecUpdate (c , sqlUpdate , curDateAddedSecs , curDateUpdatedSecs ) > 0 ;
682
682
// 0 affected update rows: must insert
683
+
684
+ if (isUpdate ) {
685
+ updateCount ++;
686
+ }
683
687
}
684
688
685
689
if (!isUpdate ) {
686
- insertCout ++;
687
690
lastSql = sqlInsert ;
688
- bindAndExecInsert (c , sqlInsert , curDateAddedSecs , curDateUpdatedSecs );
691
+ try {
692
+ bindAndExecInsert (c , sqlInsert , curDateAddedSecs , curDateUpdatedSecs );//!!!
693
+ insertCout ++;
694
+ } catch (SQLiteConstraintException ignore ) {
695
+ // already in local database, ignore
696
+ }
689
697
}
690
698
691
699
lastSql = null ;
@@ -708,7 +716,7 @@ public static int updateMediaCopy(
708
716
", updated:" + updateCount +
709
717
", toal:" + progress +
710
718
" / " + itemCount +
711
- ") in " + ((endTime .getTime () - startTime .getTime ()) / 1000 ) +
719
+ ") in " + ((endTime .getTime () - startTime .getTime ()) / FotoSql . LAST_MODIFIED_FACTOR ) +
712
720
" Secs" ;
713
721
Log .i (LOG_TAG , message );
714
722
}
@@ -718,7 +726,7 @@ public static int updateMediaCopy(
718
726
", updated:" + updateCount +
719
727
", toal:" + progress +
720
728
" / " + itemCount +
721
- ") in " + ((endTime .getTime () - startTime .getTime ()) / 1000 ) +
729
+ ") in " + ((endTime .getTime () - startTime .getTime ()) / FotoSql . LAST_MODIFIED_FACTOR ) +
722
730
" Secs" ;
723
731
Log .e (LOG_TAG , "Cannot insert/update: " + lastSql + " from " + c + " in " + message , ex );
724
732
} finally {
@@ -745,12 +753,12 @@ private static void saveStats(Context context, long maxDateAddedSecs, long maxDa
745
753
}
746
754
747
755
protected static long getDateInSecs (Cursor c , int colPosition ) {
748
- long curDateAdded = (c .isNull (colPosition )) ? 0 : c .getLong (colPosition );
749
- if (curDateAdded > nextMonthTimeInSecs ) {
756
+ long dateInSecs = (c .isNull (colPosition )) ? 0 : c .getLong (colPosition );
757
+ if (dateInSecs > nextMonthTimeInSecs ) {
750
758
// colDATE_ADDED: some apps/libs use milliscs instead of secs. Fix this.
751
- curDateAdded = curDateAdded / 1000 ;
759
+ dateInSecs = dateInSecs / FotoSql . LAST_MODIFIED_FACTOR ;
752
760
}
753
- return curDateAdded ;
761
+ return dateInSecs ;
754
762
}
755
763
756
764
private static void save (SQLiteDatabase db , Cursor c , ContentValues contentValues , long lastUpdate ) {
0 commit comments