diff --git a/app/static/app/js/css/TaskListItem.scss b/app/static/app/js/css/TaskListItem.scss index 5db2684e..58a8ae7d 100644 --- a/app/static/app/js/css/TaskListItem.scss +++ b/app/static/app/js/css/TaskListItem.scss @@ -89,6 +89,7 @@ .action-buttons{ button{ margin-right: 4px; + margin-top: 4px; } .btn-group{ diff --git a/coreplugins/openaerialmap/api.py b/coreplugins/openaerialmap/api.py index 1bcd42d8..5bf45f66 100644 --- a/coreplugins/openaerialmap/api.py +++ b/coreplugins/openaerialmap/api.py @@ -59,38 +59,41 @@ class Info(TaskView): # Populate fields from first image in task img = ImageUpload.objects.filter(task=task).exclude(image__iendswith='.txt').first() - img_path = os.path.join(settings.MEDIA_ROOT, img.path()) - im = Image.open(img_path) + if img is not None: + img_path = os.path.join(settings.MEDIA_ROOT, img.path()) + im = Image.open(img_path) - # TODO: for better data we could look over all images - # and find actual end and start time - # Here we're picking an image at random and assuming a one hour flight - if not 'sensor' in task_info: - task_info['endDate'] = datetime.utcnow().timestamp() * 1000 - task_info['sensor'] = '' - task_info['title'] = task.name - task_info['provider'] = get_site_settings().organization_name + # TODO: for better data we could look over all images + # and find actual end and start time + # Here we're picking an image at random and assuming a one hour flight + if not 'sensor' in task_info: + task_info['endDate'] = datetime.utcnow().timestamp() * 1000 + task_info['sensor'] = '' + task_info['title'] = task.name + task_info['provider'] = get_site_settings().organization_name - if 'exif' in im.info: - exif_dict = piexif.load(im.info['exif']) - if 'Exif' in exif_dict: - if piexif.ExifIFD.DateTimeOriginal in exif_dict['Exif']: - try: - parsed_date = datetime.strptime(exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal].decode('ascii'), - '%Y:%m:%d %H:%M:%S') - task_info['endDate'] = parsed_date.timestamp() * 1000 - except ValueError: - # Ignore date field if we can't parse it - pass - if '0th' in exif_dict: - if piexif.ImageIFD.Make in exif_dict['0th']: - task_info['sensor'] = exif_dict['0th'][piexif.ImageIFD.Make].decode('ascii').strip(' \t\r\n\0') + if 'exif' in im.info: + exif_dict = piexif.load(im.info['exif']) + if 'Exif' in exif_dict: + if piexif.ExifIFD.DateTimeOriginal in exif_dict['Exif']: + try: + parsed_date = datetime.strptime(exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal].decode('ascii'), + '%Y:%m:%d %H:%M:%S') + task_info['endDate'] = parsed_date.timestamp() * 1000 + except ValueError: + # Ignore date field if we can't parse it + pass + if '0th' in exif_dict: + if piexif.ImageIFD.Make in exif_dict['0th']: + task_info['sensor'] = exif_dict['0th'][piexif.ImageIFD.Make].decode('ascii').strip(' \t\r\n\0') - if piexif.ImageIFD.Model in exif_dict['0th']: - task_info['sensor'] = (task_info['sensor'] + " " + exif_dict['0th'][piexif.ImageIFD.Model].decode('ascii')).strip(' \t\r\n\0') + if piexif.ImageIFD.Model in exif_dict['0th']: + task_info['sensor'] = (task_info['sensor'] + " " + exif_dict['0th'][piexif.ImageIFD.Model].decode('ascii')).strip(' \t\r\n\0') - task_info['startDate'] = task_info['endDate'] - 60 * 60 * 1000 - set_task_info(task.id, task_info) + task_info['startDate'] = task_info['endDate'] - 60 * 60 * 1000 + set_task_info(task.id, task_info) + else: + task_info['noImages'] = True return Response(task_info, status=status.HTTP_200_OK) diff --git a/coreplugins/openaerialmap/public/ShareButton.jsx b/coreplugins/openaerialmap/public/ShareButton.jsx index 13233ae7..f8afc4a3 100644 --- a/coreplugins/openaerialmap/public/ShareButton.jsx +++ b/coreplugins/openaerialmap/public/ShareButton.jsx @@ -109,6 +109,7 @@ export default class ShareButton extends React.Component{ render(){ const { loading, taskInfo, error } = this.state; + if (taskInfo.noImages) return (
); const getButtonIcon = () => { if (loading || taskInfo.sharing) return "fa fa-circle-notch fa-spin fa-fw"; diff --git a/package.json b/package.json index 467d1578..6bfcf82a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "WebODM", - "version": "1.9.11", + "version": "1.9.12", "description": "User-friendly, extendable application and API for processing aerial imagery.", "main": "index.js", "scripts": {