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;
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;
* @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;
}
/**
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;
{
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) {}