X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Ffunction%2FAsyncMediaLoader.java;h=78ffc838197450079cf935f6da59cdd1186b35e4;hb=1ea5817da5381ceebee75ea7294ea78dffff5671;hp=0365125b6e9e5133487e63790eb5948069683bf3;hpb=649c5da6ee1bbc590699e11a92316ece2ea8512d;p=GpsPrune.git diff --git a/tim/prune/function/AsyncMediaLoader.java b/tim/prune/function/AsyncMediaLoader.java index 0365125..78ffc83 100644 --- a/tim/prune/function/AsyncMediaLoader.java +++ b/tim/prune/function/AsyncMediaLoader.java @@ -8,9 +8,12 @@ import tim.prune.GenericFunction; import tim.prune.I18nManager; import tim.prune.UpdateMessageBroker; import tim.prune.data.AudioClip; +import tim.prune.data.DataPoint; +import tim.prune.data.Distance; import tim.prune.data.MediaObject; import tim.prune.data.Photo; import tim.prune.data.Track; +import tim.prune.data.UnitSetLibrary; import tim.prune.load.MediaHelper; import tim.prune.load.MediaLoadProgressDialog; import tim.prune.undo.UndoLoadAudios; @@ -29,6 +32,8 @@ implements Runnable, Cancellable private String[] _linkArray = null; /** Track to use for connecting */ private Track _track = null; + /** Source file */ + private File _sourceFile = null; /** Cancelled flag */ private boolean _cancelled = false; @@ -38,13 +43,15 @@ implements Runnable, Cancellable * @param inApp App object * @param inLinkArray array of links * @param inTrack Track object for connecting points + * @param inSourceFile file from which data was loaded, if any */ - public AsyncMediaLoader(App inApp, File inZipFile, String[] inLinkArray, Track inTrack) + public AsyncMediaLoader(App inApp, File inZipFile, String[] inLinkArray, Track inTrack, File inSourceFile) { super(inApp); _zipFile = inZipFile; _linkArray = inLinkArray; _track = inTrack; + _sourceFile = inSourceFile; } /** @@ -84,6 +91,7 @@ implements Runnable, Cancellable if (numLinks <= 0) return; // Make progress dialog MediaLoadProgressDialog progressDialog = new MediaLoadProgressDialog(_app.getFrame(), this); + // Make array to store results MediaObject[] media = new MediaObject[numLinks]; int currLink = 0; @@ -91,17 +99,33 @@ implements Runnable, Cancellable { if (_linkArray[i] != null) { - MediaObject mf = MediaHelper.createMediaObject(_zipFile, _linkArray[i]); + MediaObject mf = MediaHelper.createMediaObject(_zipFile, _linkArray[i], _sourceFile); if (mf != null) { + // Check if the media object has a point now (from exif) + DataPoint exifPoint = mf.getDataPoint(); // attach media to point and set status _track.getPoint(i).attachMedia(mf); - mf.setOriginalStatus(MediaObject.Status.TAGGED); - mf.setCurrentStatus(MediaObject.Status.TAGGED); + // Check exif to see whether media was already tagged + final MediaObject.Status originalMediaStatus = + (exifPoint == null ? MediaObject.Status.NOT_CONNECTED : MediaObject.Status.TAGGED); + mf.setOriginalStatus(originalMediaStatus); + MediaObject.Status currMediaStatus = MediaObject.Status.TAGGED; + if (exifPoint != null) + { + final double distinMetres = Distance.convertRadiansToDistance( + DataPoint.calculateRadiansBetween(exifPoint, _track.getPoint(i)), + UnitSetLibrary.UNITS_METRES); + if (distinMetres > 10.0) { + currMediaStatus = MediaObject.Status.CONNECTED; // still connected but changed + } + } + mf.setCurrentStatus(currMediaStatus); media[currLink] = mf; // update progress - if (!_app.isBusyLoading()) + if (!_app.isBusyLoading()) { progressDialog.showProgress(currLink, numLinks); + } currLink++; } try {Thread.sleep(100);} catch (InterruptedException ie) {}