Skip to content

Commit c1fea92

Browse files
committed
add protocol to urls, add save_meta for meta file creation for meta from lua
1 parent 98d942c commit c1fea92

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

django/gsmap/models.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import string
33
from enum import IntFlag
44
import requests
5+
import os
56
from django.utils import timezone
67
from django.db.models.signals import post_save
78
from django.dispatch import receiver
@@ -11,11 +12,21 @@
1112
from django.contrib.sites.models import Site
1213
from django.utils.html import format_html
1314
from django.conf import settings
15+
from django.core.files.base import ContentFile
16+
from django.core.files.storage import FileSystemStorage
1417
from sortedm2m.fields import SortedManyToManyField
15-
from sorl.thumbnail import ImageField
18+
from sorl.thumbnail import ImageField, get_thumbnail
1619
from gsuser.models import User
1720

1821

22+
class OverwriteStorage(FileSystemStorage):
23+
def get_available_name(self, name, max_length=None):
24+
# If the filename already exists, remove it as if it was a true file system
25+
if self.exists(name):
26+
os.remove(os.path.join(settings.MEDIA_ROOT, name))
27+
return name
28+
29+
1930
class Municipality(models.Model):
2031
class Meta:
2132
verbose_name_plural = 'municipalities'
@@ -146,8 +157,9 @@ def thumbnail(self):
146157

147158
def get_absolute_link(self):
148159
domain = Site.objects.get_current().domain
160+
proto = 'https' if settings.USE_HTTPS else 'http'
149161
return format_html(
150-
f'<a href="//{domain}{self.get_absolute_url()}" target="_blank">'
162+
f'<a href="{proto}://{domain}{self.get_absolute_url()}" target="_blank">'
151163
f'{domain}{self.get_absolute_url()}</a>'
152164
)
153165
get_absolute_link.short_description = "Snapshot Url"
@@ -205,9 +217,10 @@ def __str__(self):
205217

206218
@receiver(post_save, sender=Snapshot)
207219
def save_screenshot_handler(sender, **kwargs):
220+
instance = kwargs.get('instance')
221+
208222
def save_screenshot():
209223
post_save.disconnect(save_screenshot_handler, sender=Snapshot)
210-
instance = kwargs.get('instance')
211224
# only create snapshot if data changed
212225
if instance.data_changed([
213226
'data', 'screenshot_generated', 'thumbnail_generated'
@@ -225,9 +238,27 @@ def save_screenshot():
225238
finally:
226239
# always reconnect signal
227240
post_save.connect(save_screenshot_handler, sender=Snapshot)
241+
242+
def save_meta(storage):
243+
domain = Site.objects.get_current().domain
244+
proto = 'https' if settings.USE_HTTPS else 'http'
245+
meta = f'''name="og:title" content="{instance.title}"
246+
name="og:url" content="{instance.get_absolute_link()}"
247+
name="og:image" content="{proto}://{domain}/{instance.image_facebook()}"
248+
name="twitter:image" content="{proto}://{domain}/{instance.image_twitter()}"
249+
'''
250+
storage.save(f'snapshot-meta/{instance.id}.html', ContentFile(meta))
251+
228252
if hasattr(settings, 'SAVE_SCREENSHOT_ENABLED') and settings.SAVE_SCREENSHOT_ENABLED is True:
229253
save_screenshot()
230254

255+
if instance.screenshot:
256+
storage = OverwriteStorage()
257+
if instance.permission is int(SnapshotPermission.PUBLIC):
258+
save_meta(storage)
259+
else:
260+
storage.delete(f'snapshot-meta/{instance.id}.html')
261+
231262

232263
class Workspace(models.Model):
233264
class Meta:
@@ -246,9 +277,10 @@ class Meta:
246277
snapshots = SortedManyToManyField(Snapshot)
247278

248279
def get_absolute_link(self):
280+
proto = 'https' if settings.USE_HTTPS else 'http'
249281
domain = Site.objects.get_current().domain
250282
return format_html(
251-
f'<a href="//{domain}{self.get_absolute_url()}" target="_blank">'
283+
f'<a href="{proto}://{domain}{self.get_absolute_url()}" target="_blank">'
252284
f'{domain}{self.get_absolute_url()}</a>'
253285
)
254286
get_absolute_link.short_description = "Workspace Url"
@@ -257,7 +289,6 @@ def get_absolute_url(self):
257289
first_id = self.snapshots.all().first().id
258290
return f'/{self.id}/{first_id}/'
259291

260-
261292
def save(self, *args, **kwargs):
262293
def test_exists(pk):
263294
if self.__class__.objects.filter(pk=pk):

0 commit comments

Comments
 (0)