aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/db/mongo/migrations.py18
-rw-r--r--mediagoblin/db/sql/convert.py23
-rw-r--r--mediagoblin/media_types/image/models.py2
-rw-r--r--mediagoblin/media_types/image/processing.py6
-rw-r--r--mediagoblin/templates/mediagoblin/utils/geolocation_map.html25
5 files changed, 62 insertions, 12 deletions
diff --git a/mediagoblin/db/mongo/migrations.py b/mediagoblin/db/mongo/migrations.py
index c5766b0d..23cf5e45 100644
--- a/mediagoblin/db/mongo/migrations.py
+++ b/mediagoblin/db/mongo/migrations.py
@@ -153,3 +153,21 @@ def convert_video_media_data(database):
assert len(document['media_data']) == 1
document['media_data'] = document['media_data']['video']
collection.save(document)
+
+@RegisterMigration(11)
+def convert_gps_media_data(database):
+ """
+ Move media_data["gps"]["*"] to media_data["gps_*"].
+ In preparation for media_data.gps_*
+ """
+ collection = database['media_entries']
+ target = collection.find(
+ {'media_data.gps': {'$exists': True}})
+
+ for document in target:
+ print document['_id'], "old:", document['media_data']
+ for key, value in document['media_data']['gps'].iteritems():
+ document['media_data']['gps_' + key] = value
+ del document['media_data']['gps']
+ print document['_id'], "new:", document['media_data']
+ collection.save(document)
diff --git a/mediagoblin/db/sql/convert.py b/mediagoblin/db/sql/convert.py
index 086a5c9c..dca93f3f 100644
--- a/mediagoblin/db/sql/convert.py
+++ b/mediagoblin/db/sql/convert.py
@@ -14,12 +14,14 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+from copy import copy
from mediagoblin.init import setup_global_and_app_config, setup_database
from mediagoblin.db.mongo.util import ObjectId
from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
Tag, MediaTag, MediaFile, MediaAttachmentFile)
+from mediagoblin.media_types.image.models import ImageData
from mediagoblin.media_types.video.models import VideoData
from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \
sql_connect
@@ -106,6 +108,25 @@ def convert_media_entries(mk_db):
session.close()
+def convert_image(mk_db):
+ session = Session()
+
+ for media in mk_db.MediaEntry.find(
+ {'media_type': 'mediagoblin.media_types.image'}).sort('created'):
+ media_data = copy(media.media_data)
+
+ # TODO: Fix after exif is migrated
+ media_data.pop('exif', None)
+
+ if len(media_data):
+ media_data_row = ImageData(**media_data)
+ media_data_row.media_entry = obj_id_table[media._id]
+ session.add(media_data_row)
+
+ session.commit()
+ session.close()
+
+
def convert_video(mk_db):
session = Session()
@@ -180,6 +201,8 @@ def run_conversion(config_name):
Session.remove()
convert_media_entries(mk_db)
Session.remove()
+ convert_image(mk_db)
+ Session.remove()
convert_video(mk_db)
Session.remove()
convert_media_tags(mk_db)
diff --git a/mediagoblin/media_types/image/models.py b/mediagoblin/media_types/image/models.py
index 7ffd209b..88ccc84e 100644
--- a/mediagoblin/media_types/image/models.py
+++ b/mediagoblin/media_types/image/models.py
@@ -14,6 +14,8 @@ class ImageData(Base):
height = Column(Integer)
gps_longitude = Column(Float)
gps_latitude = Column(Float)
+ gps_altitude = Column(Float)
+ gps_direction = Column(Float)
DATA_MODEL = ImageData
diff --git a/mediagoblin/media_types/image/processing.py b/mediagoblin/media_types/image/processing.py
index 769de89b..b61e717d 100644
--- a/mediagoblin/media_types/image/processing.py
+++ b/mediagoblin/media_types/image/processing.py
@@ -119,7 +119,11 @@ def process_image(entry):
'clean': clean_exif(exif_tags)}
media_data['exif']['useful'] = get_useful(
media_data['exif']['clean'])
- media_data['gps'] = gps_data
+
+ if len(gps_data):
+ for key in list(gps_data.keys()):
+ gps_data['gps_' + key] = gps_data.pop(key)
+ entry.media_data_init(**gps_data)
# clean up workbench
workbench.destroy_self()
diff --git a/mediagoblin/templates/mediagoblin/utils/geolocation_map.html b/mediagoblin/templates/mediagoblin/utils/geolocation_map.html
index 118d0e62..e8baa247 100644
--- a/mediagoblin/templates/mediagoblin/utils/geolocation_map.html
+++ b/mediagoblin/templates/mediagoblin/utils/geolocation_map.html
@@ -17,24 +17,27 @@
#}
{% block geolocation_map %}
- {% if media.media_data.has_key('gps')
- and app_config['geolocation_map_visible']
- and media.media_data.gps %}
- <h3 class="sidedata">Location</h3>
+ {% if app_config['geolocation_map_visible']
+ and media.media_data.gps_latitude is defined
+ and media.media_data.gps_latitude
+ and media.media_data.gps_longitude is defined
+ and media.media_data.gps_longitude %}
+ <h3 class="sidedata">{% trans %}Location{% endtrans %}</h3>
<div>
- {% set gps = media.media_data.gps %}
+ {%- set lon = media.media_data.gps_longitude %}
+ {%- set lat = media.media_data.gps_latitude %}
+ {%- set osm_url = "http://openstreetmap.org/?mlat={lat}&mlon={lon}".format(lat=lat, lon=lon) %}
<div id="tile-map" style="width: 100%; height: 196px;">
<input type="hidden" id="gps-longitude"
- value="{{ gps.longitude }}" />
+ value="{{ lon }}" />
<input type="hidden" id="gps-latitude"
- value="{{ gps.latitude }}" />
+ value="{{ lat }}" />
</div>
<p>
<small>
- View on
- <a href="http://openstreetmap.org/?mlat={{ gps.latitude }}&mlon={{ gps.longitude }}">
- OpenStreetMap
- </a>
+ {% trans -%}
+ View on <a href="{{ osm_url }}">OpenStreetMap</a>
+ {%- endtrans %}
</small>
</p>
</div>