Skip to content

Commit a9ab93d

Browse files
committed
#173: Improved Logging/Errorhandling in Mediascanner
1 parent 02144ad commit a9ab93d

10 files changed

+52
-38
lines changed

app/src/main/java/de/k3b/android/androFotoFinder/AndroFotoFinderApp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ private static IMediaRepositoryApi registerAo10MediaImageDbReplacement(Context c
148148

149149
if (FotoSql.getCount(new QueryParameter().addWhere("1 = 1")) == 0) {
150150
// database is empty; reload from Contentprovider
151-
MediaContent2DBUpdateService.instance.rebuild(context, null);
151+
MediaContent2DBUpdateService.instance.rebuild(
152+
"registerAo10MediaImageDbReplacement", context, null);
152153
}
153154

154155
PhotoChangeNotifyer.registerContentObserver(context, GlobalMediaContentObserver.getInstance(context));

app/src/main/java/de/k3b/android/androFotoFinder/FotoGalleryActivity.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ private void onDbUpdate(String title) {
247247

248248
private int onDbUpdateCommand(String title) {
249249
Activity activity = this;
250-
int count = AndroFotoFinderApp.getMediaContent2DbUpdateService().update(this, null);
250+
int count = AndroFotoFinderApp.getMediaContent2DbUpdateService().update(title, this, null);
251251

252252
IProgessListener progessListener = activity instanceof IProgessListener ? ((IProgessListener) activity) : null;
253253

@@ -266,13 +266,13 @@ private int onDbUpdateCommand(String title) {
266266
return count;
267267
}
268268

269-
private boolean onDbReloadQuestion(String title) {
269+
private boolean onDbReloadQuestion(final String title) {
270270
final Dialogs dlg = new Dialogs() {
271271
@Override
272272
protected void onDialogResult(String result, Object[] parameters) {
273273
setAutoClose(null, null, null);
274274
if (result != null) {
275-
onDbReloadAnswer();
275+
onDbReloadAnswer(title);
276276
}
277277
}
278278
};
@@ -282,7 +282,7 @@ protected void onDialogResult(String result, Object[] parameters) {
282282
return true;
283283
}
284284

285-
private void onDbReloadAnswer() {
285+
private void onDbReloadAnswer(final String title) {
286286
new AsyncTaskRunnerWithProgressDialog(this, R.string.load_db_menu_title) {
287287
@Override
288288
protected void onPostExecute(Integer itemCount) {
@@ -295,7 +295,7 @@ protected void onPostExecute(Integer itemCount) {
295295
}
296296
}
297297

298-
}.execute(AndroFotoFinderApp.getMediaContent2DbUpdateService().getRebbuildRunner());
298+
}.execute(AndroFotoFinderApp.getMediaContent2DbUpdateService().getRebbuildRunner(title));
299299
}
300300

301301
public void notifyPhotoChanged() {

app/src/main/java/de/k3b/android/androFotoFinder/gallery/cursor/GalleryCursorFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1532,7 +1532,7 @@ public void onLoaderReset(Loader<Cursor> loader) {
15321532
// rember position where we have to scroll to after refreshLocal is finished.
15331533
mLastVisiblePosition = mGalleryView.getLastVisiblePosition();
15341534

1535-
mAdapter.swapCursor(null);
1535+
if (mAdapter != null) mAdapter.swapCursor(null);
15361536
notifyPhotoChanged();
15371537
}
15381538

app/src/main/java/de/k3b/android/androFotoFinder/queries/MediaContent2DBUpdateService.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,17 @@ public void clearMediaCopy() {
5959
DatabaseHelper.version2Upgrade_ReCreateMediaDbTable(context, writableDatabase);
6060
}
6161

62-
public ITaskRunner getRebbuildRunner() {
62+
public ITaskRunner getRebbuildRunner(final String title) {
6363
return new ITaskRunner() {
6464
@Override
6565
public int run(Context context, IProgessListener progessListener) {
66-
return rebuild(context, progessListener);
66+
return rebuild(title, context, progessListener);
6767
}
6868
};
6969

7070
}
7171

72-
public int rebuild(Context context, IProgessListener progessListener) {
72+
public int rebuild(String dbgContext, Context context, IProgessListener progessListener) {
7373
long start = new Date().getTime();
7474
if (progessListener != null)
7575
progessListener.onProgress(0, 0, "Create Backup of tags, lat, lon, rating");
@@ -78,7 +78,7 @@ public int rebuild(Context context, IProgessListener progessListener) {
7878
clearMediaCopy();
7979
if (progessListener != null)
8080
progessListener.onProgress(0, 0, "Copy from Android Media Database");
81-
int changeCount = MediaDBRepository.Impl.updateMediaCopy(context, writableDatabase, null, null, progessListener);
81+
int changeCount = MediaDBRepository.Impl.updateMediaCopy(dbgContext, context, writableDatabase, null, null, progessListener);
8282
if (progessListener != null)
8383
progessListener.onProgress(0, 0, "Restore tags, lat, lon, rating from Backup");
8484
DatabaseHelper.restoreFromBackup(writableDatabase);
@@ -92,9 +92,9 @@ public void createBackup() {
9292
DatabaseHelper.createBackup(writableDatabase);
9393
}
9494

95-
public int update(Context context, IProgessListener progessListener) {
95+
public int update(String dbgContext, Context context, IProgessListener progessListener) {
9696
long start = new Date().getTime();
97-
int changeCount = MediaDBRepository.Impl.updateMediaCopy(context, writableDatabase, progessListener);
97+
int changeCount = MediaDBRepository.Impl.updateMediaCopy(dbgContext, context, writableDatabase, progessListener);
9898
long timeInSecs = (new Date().getTime() - start) / 1000;
9999
final String text = "update db " + timeInSecs + " secs";
100100
Toast.makeText(context, text, Toast.LENGTH_LONG).show();

app/src/main/java/de/k3b/android/androFotoFinder/queries/MediaContentproviderRepositoryImpl.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,16 @@ public class MediaContentproviderRepositoryImpl {
4646

4747
public static Cursor createCursorForQuery(
4848
StringBuilder out_debugMessage, String dbgContext, final Context context,
49-
QueryParameter parameters, VISIBILITY visibility, CancellationSignal cancellationSignal) {
50-
FotoSql.setWhereVisibility(parameters, visibility);
51-
return createCursorForQuery(out_debugMessage, dbgContext, context, parameters.toFrom(),
52-
parameters.toAndroidWhere(),
53-
parameters.toAndroidParameters(), parameters.toOrderBy(),
54-
cancellationSignal, parameters.toColumns()
49+
QueryParameter query, VISIBILITY visibility, CancellationSignal cancellationSignal) {
50+
FotoSql.setWhereVisibility(query, visibility);
51+
if (out_debugMessage == null && Global.debugEnabledSql) {
52+
Log.i(LOG_TAG, dbgContext + ":" +
53+
MODUL_NAME + "\n" + query.toSqlString());
54+
}
55+
return createCursorForQuery(out_debugMessage, dbgContext, context, query.toFrom(),
56+
query.toAndroidWhere(),
57+
query.toAndroidParameters(), query.toOrderBy(),
58+
cancellationSignal, query.toColumns()
5559
);
5660
}
5761

@@ -65,20 +69,20 @@ static Cursor createCursorForQuery(
6569
CancellationSignal cancellationSignal, final String... sqlSelectColums) {
6670
ContentResolver resolver = context.getContentResolver();
6771

68-
Cursor query = null;
72+
Cursor cursor = null;
6973

7074
Exception excpetion = null;
7175
try {
7276
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
73-
query = resolver.query(Uri.parse(from), sqlSelectColums, sqlWhereStatement, sqlWhereParameters, sqlSortOrder, cancellationSignal);
77+
cursor = resolver.query(Uri.parse(from), sqlSelectColums, sqlWhereStatement, sqlWhereParameters, sqlSortOrder, cancellationSignal);
7478
} else {
75-
query = resolver.query(Uri.parse(from), sqlSelectColums, sqlWhereStatement, sqlWhereParameters, sqlSortOrder);
79+
cursor = resolver.query(Uri.parse(from), sqlSelectColums, sqlWhereStatement, sqlWhereParameters, sqlSortOrder);
7680
}
7781
} catch (Exception ex) {
7882
excpetion = ex;
7983
} finally {
8084
if ((excpetion != null) || Global.debugEnabledSql || (out_debugMessage != null)) {
81-
final int count = (query == null) ? 0 : query.getCount();
85+
final int count = (cursor == null) ? 0 : cursor.getCount();
8286
StringBuilder message = StringUtils.appendMessage(out_debugMessage, excpetion,
8387
dbgContext, MODUL_NAME +
8488
".createCursorForQuery:\n",
@@ -90,7 +94,7 @@ static Cursor createCursorForQuery(
9094
}
9195
}
9296

93-
return query;
97+
return cursor;
9498
}
9599

96100
public static int execUpdate(String dbgContext, Context context, String path, ContentValues values, VISIBILITY visibility) {

app/src/main/java/de/k3b/android/androFotoFinder/queries/MediaDBRepository.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -665,34 +665,36 @@ public static void clearMedaiCopy(SQLiteDatabase db) {
665665
}
666666

667667
public static int updateMediaCopy(
668-
Context context, SQLiteDatabase db,
668+
String dbgContext, Context context, SQLiteDatabase db,
669669
IProgessListener progessListener) {
670670
SharedPreferences prefsInstance = PreferenceManager
671671
.getDefaultSharedPreferences(context.getApplicationContext());
672672
long maxDateAddedSecs = prefsInstance.getLong("maxDateAddedSecs", 0l);
673-
return updateMediaCopy(context, db, null, new Date(maxDateAddedSecs * FotoSql.LAST_MODIFIED_FACTOR), progessListener);
673+
return updateMediaCopy(dbgContext, context, db, null, new Date(maxDateAddedSecs * FotoSql.LAST_MODIFIED_FACTOR), progessListener);
674674
}
675675

676676
public static int updateMediaCopy(
677-
Context context, SQLiteDatabase db,
677+
String dbgContext, Context context, SQLiteDatabase db,
678678
Date filterLastUpdateMin, Date filterLastAddedMin, IProgessListener progessListener) {
679679
int progress = 0;
680680
java.util.Date startTime = new java.util.Date();
681681

682682
QueryParameter query = new QueryParameter().getFrom(queryGetAllColumns);
683683

684-
Calendar nextMonth = Calendar.getInstance();
685-
nextMonth.add(Calendar.MONTH, 1);
686-
nextMonthTimeInSecs = nextMonth.getTimeInMillis() / FotoSql.LAST_MODIFIED_FACTOR;
687-
688684
long filterLastUpdateMinInMillis = (filterLastUpdateMin != null) ? (filterLastUpdateMin.getTime()) : 0L;
689685
if (filterLastUpdateMinInMillis != 0) {
690686
FotoSql.addWhereDateModifiedMinMax(query, filterLastUpdateMinInMillis, 0);
687+
dbgContext += " LastUpdate >= " + filterLastUpdateMin;
691688
}
692689

693690
long filterLastAddedMinInMillis = (filterLastAddedMin != null) ? (filterLastAddedMin.getTime()) : 0L;
694691
if (filterLastAddedMinInMillis != 0) {
692+
Calendar nextMonth = Calendar.getInstance();
693+
nextMonth.add(Calendar.MONTH, 1);
694+
nextMonthTimeInSecs = nextMonth.getTimeInMillis() / FotoSql.LAST_MODIFIED_FACTOR;
695+
695696
FotoSql.addWhereDateAddedMinMax(query, filterLastAddedMinInMillis, nextMonth.getTimeInMillis());
697+
dbgContext += " LastAdded >= " + filterLastAddedMin;
696698
}
697699

698700
Cursor c = null;
@@ -710,7 +712,7 @@ public static int updateMediaCopy(
710712
if (progessListener != null) progessListener.onProgress(progress, 0,
711713
context.getString(R.string.load_db_menu_title));
712714

713-
c = MediaContentproviderRepositoryImpl.createCursorForQuery(null, "updateMedaiCopy-source", context,
715+
c = MediaContentproviderRepositoryImpl.createCursorForQuery(null, dbgContext + "-updateMedaiCopy-source", context,
714716
query, null, null);
715717
itemCount = c.getCount();
716718

app/src/main/java/de/k3b/android/util/Ao10DbUpdateOnlyPhotoPropertiesMediaFilesScannerAsyncTask.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,15 @@ public static Date loadDateLastAdded(Context context) {
7373
@Override
7474
protected Integer doInBackground(IFile[]... pathNames) {
7575
// do not call super.doInBackground here because logic is different
76-
String dbgContext = "First APM-Re-Scan Photos";
76+
String dbgContext = "APM-Re-Scan Photos without tags/gps/rating since " + dateLastAdded + "\n";
7777
int resultCount = 0;
7878
boolean oldValue = this.mScanner.setIgnoreNoMediaCheck(true);
79-
StringBuilder outDebugLog = new StringBuilder();
8079
List<Long> notFound = new ArrayList<>();
8180
long dateAddedInSecs = 0;
8281
try {
8382
onProgress(0, 0, "#");
8483
QueryParameter query = TagSql.createQueryIdPathDateForMediaScan(dateLastAdded);
85-
Cursor c = mediaDBApi.createCursorForQuery(outDebugLog, dbgContext, query, null, null);
84+
Cursor c = mediaDBApi.createCursorForQuery(null, dbgContext, query, null, null);
8685
int size = c.getCount();
8786
if (c.moveToFirst()) {
8887
do {

app/src/main/java/de/k3b/android/util/PhotoPropertiesMediaFilesScannerExifInterface.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,26 @@
2323
import android.content.ContentValues;
2424
import android.content.Context;
2525

26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
28+
2629
import java.io.IOException;
2730

2831
import de.k3b.geo.api.IGeoPointInfo;
2932
import de.k3b.io.filefacade.IFile;
3033
import de.k3b.media.ExifInterfaceEx;
3134
import de.k3b.media.IPhotoProperties;
35+
import de.k3b.media.PhotoPropertiesImageReader;
3236

3337
/**
3438
* PhotoPropertiesMediaFilesScanner based on android ExifInterface.
35-
*
39+
* <p>
3640
* Created by k3b on 11.04.2017.
3741
*/
3842

3943
public class PhotoPropertiesMediaFilesScannerExifInterface extends PhotoPropertiesMediaFilesScanner {
44+
private static final Logger logger = LoggerFactory.getLogger(PhotoPropertiesImageReader.LOG_TAG);
45+
4046
public PhotoPropertiesMediaFilesScannerExifInterface(Context context) {
4147
super(context);
4248
}
@@ -49,6 +55,7 @@ protected IPhotoProperties loadNonMediaValues(ContentValues destinationValues, I
4955
if (!exif.isValidJpgExifFormat()) exif = null;
5056
} catch (IOException ex) {
5157
// exif is null
58+
logger.info(" Error open file '" + jpgFile + "' as jpg :" + ex.getMessage());
5259
}
5360

5461
if ((exif != null) && (destinationValues != null)) {

fastlane/metadata/android/en-US/changelogs/49.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ Changes from 0.8.4 to ???
33
* #155: Android-10 support (experimental)
44
* #173: incremental media scanner
55
* #173: Ao10-performance-Optimized-Mediacanner
6-
* #190: Backup/Restore lat/long/tags/rating
6+
* #190: Backup/Restore lat/long/tags/rating to prevent datalos when local DB is recreated

fotolib2/src/main/java/de/k3b/media/PhotoPropertiesImageReader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ public PhotoPropertiesImageReader load(IFile jpegFile, InputStream inputStream,
130130
if (inputStream == null) inputStream = jpegFile.openInputStream();
131131
metadata = JpegMetadataReader.readMetadata(inputStream);
132132
} catch (ImageProcessingException e) {
133-
logger.error(dbg_context +" Error open file " + e.getMessage(), e);
133+
// occurs if png or gif file
134+
logger.info(dbg_context + " Error open file '" + jpegFile + "' as jpg :" + e.getMessage());
134135

135136
metadata = null;
136137
} finally {

0 commit comments

Comments
 (0)