WIP: Překopání galerií (a implementace videí) #99
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "galerie_videjka"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Velká část kódu je napsaná,
migrace zatím vůbec, takže se dá testovat jen podivně ze shellu bez sáhnutí na databázi.TODO (z message u
b25d475148přepsáno sem, ať jde odškrtávat):obrazek_stredniaobrazek_velkyTODO z !95 (nevyřešené k 2025-12-19):
TODO další (převážně ze spodu):
Další tipy, co umět:
Jo, a v komentářích jsou random zakomentované kusy kódu, které se buď mají objevit jinde (a jinak), nebo smazat úplně…připsáno do TODOWIP: Videjka a další bazmeky do galeriíto RFC: Videjka a další bazmeky do galerií@zelvuska Máš tip, odkud mám syntaxi dokumentace opsat? Vím, že jsme něco měli, jen se mi to nechce dohledávat, tak jestli zvládneš vytáhnout z paměti…
Prohlašuji galerii s videjky za MVP, jdu nasadit na testweb (v nějaké ad-hoc kombinaci s !98), pusťte se do hejtění kódu a testování
Moje poznámky k tomu, co se má vylepšit…
@ -47,2 +49,3 @@# Technicky misnomer: takový `Obrazek` může být i videjko a výhledově i něco dalšího…class Obrazek(models.Model):obrazek_velky = models.ImageField(upload_to=obrazek_filename,# „originál“ (modulo max. velikost uploadu na web FIXME!)doku
@ -56,0 +56,4 @@VIDEO = 'video', 'Video'NEVIM = 'nevim', 'Neznámý typ'typ = models.CharField('Typ', max_length=16, blank=False, null=False, choices=Typ.choices, default=Typ.NEVIM)# Filename by default; slouží k řazenídoku nebo help_text
@ -73,3 +74,1 @@return u'<img src="{}">'.format(self.obrazek_maly.url)obrazek_maly_tag.short_description = "Náhled"obrazek_maly_tag.allow_tags = Trueordering = ['nazev'] #FIXME: zohlednit pořadí a asi i příslušnost ke galeriiFIXME
@ -76,2 +77,4 @@.galerie_nahledy img {margin: 10px;max-height: 100px;max-width: 200px;Hodnoty random nastřelené… (asi nevadí)
… asi nevadí.
@ -111,3 +108,3 @@{# nahledy predchozich obrazku #}{% for obrazek in obrazky_predchozi %}<a href="../{{obrazek.pk}}#nahoru"><img src="{{obrazek.obrazek_maly.url}}" height="100"></a><a href="../{{obrazek.pk}}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>zrušit height?
@ -125,3 +115,3 @@{# nahledy nasledujicich obrazku #}{% for obrazek in obrazky_dalsi %}<a href="../{{obrazek.pk}}#nahoru"><img src="{{obrazek.obrazek_maly.url}}" height="100"></a><a href="../{{obrazek.pk}}#nahoru">{% zmenseny_nahled obrazek.jako_bazmek height=100 %}</a>i tady zrušit height?
@ -59,3 +60,1 @@<img src="{{ obrazek.url }}"/>{% endwith %}{% zmenseny_nahled pgalerie.titulni_obrazek.jako_bazmek class="" %}Má mít class nebo tam ten atribut nemá být vůbec
@ -106,0 +98,4 @@href="./{{obrazek.pk}}#nahoru" class="galerie_nahled"><span class="vystredeno"></span>{% zmenseny_nahled obrazek.jako_bazmek %}{# title=obrazek.popis (a byl tu if, že se použil jen když existoval…) width=obrazek.obrazek_maly.width height=obrazek.obrazek_maly.height #}smazat? title by se měl použít z vnějšího tagu, či?
Nepoužije se, ale stejně ve dvou třetinách obrázku neviditelně překáží „Předcházející“ a „Následující“, tak to smažu i tady.
Kecáááám, koukám na ten druhý template. Ale tady se to taky projevuje přímo. Takže smažu všechno :-D
@ -0,0 +14,4 @@from django.contrib.staticfiles.finders import find# FIXME: static fily na lokálním webu??find = lambda x: '/static/'+xFIXME
@ -0,0 +23,4 @@from imagekit.cachefiles import ImageCacheFilefrom imagekit.processors import ResizeToFit, TransposeHTML = str | SafeStringKomentář, že v Py3.12 má být
type HTML = ...@ -0,0 +122,4 @@attrs = _fmt_attrs(kwargs)# Stavíme HTML ad-hoc, co se může rozbít :'-)obrazek = format_html(r'<img src="{}"/>', self.placeholder, attrs)popisek = format_html(r'<p style="text-align: center; font-size: 1.1em;">Prosím oprav typ aktuálního obrázku v <a href="{}">adminu</a>!</p>', reverse('admin:galerie_obrazek_change', args=(self.db_objekt.id,)))hnus
Pořád mi sice přijde, že mít takhle stavěné HTML v kódu je hnus, ale nevím, jestli dává smysl to měnit. Můžu vybastlit někde dedikovanou šablonu (asi ne doslova django template), ale mám trochu pocit, že to akorát rozhází kód na různá místa a tolik to nepomůže…
Názory? Teď mám pocit, že to prostě nebudu řešit a zavřu to…
@ -0,0 +29,4 @@name='typ',field=models.CharField(choices=[('obrazek', 'Obrázek'), ('video', 'Video'), ('nevim', 'Neznámý typ')], default='nevim', max_length=16, verbose_name='Typ'),),migrations.RunPython(zatim_byly_jen_obrazky, migrations.RunPython.noop)Možná by směrem zpátky spíš mělo selhat, pokud v galerii existuje ne-obrázek…
Při ručním přidávání obrázků z Adminu se netipuje typ automaticky :-/
SVG zjevně není obrázek (Pillow ho neumí zpracovat)…
@ -7,3 +7,3 @@/* zmenšování spolu s oknem prohlížeče */.galerie .obrazek, .titulni_obrazek {max-width: 100%;max-width: max(100%, 900px);900 je nějak moc, ne? (Třeba když jsi na mobilu, tak to znamená, že uvidíš minimum z toho obrázku, ne?)
To je vzaté z původních
views.py, za to nemůžu já :-D Ale je to hodně, co třeba600px? (Haluzím velmi náhodně a na monitoru, zas to nemůže být moc málo, jinak se to zmenší moc…)Aha, tak to asi nechme…
Není zdokumentované, jak galerii zveřejňovat – je potřeba nejdřív přenastavit neveřejné galerie na správná práva a pak případně automaticky zveřejnit všechno…
RFC: Videjka a další bazmeky do galeriíto Překopání galerií (a implementace videí)Překopání galerií (a implementace videí)to WIP: Překopání galerií (a implementace videí)@ -21,3 +22,3 @@// dolevaif (e.which == 37) {window.location.assign("../{{ predchozi_obrazek.pk }}#nahoru");window.location.assign("{% url 'galerie_soubor' soustredeni=soustredeni.id galerie=galerie.pk soubor=predchozi_obrazek.pk %}#nahoru");Django dokumentace doporučuje používat
get_absolute_url. Tím by se navíc zmenšila duplikace kódu.Asi se nesnažím napsat kompletní sadu testů, která popíše všechno. Mám test/y na to, že galerie v běžném případě funguje, až se najdou další problémy, tak se napíšou další testy (což není neobvyklý přístup k testování i v jiných projektech).
A jestli je ten test napsaný dobře a dává smysl, to mi určitě řekne review :-P
Ěblý templaty mi z nějakého důvodu ani neukázaly warning, že `obrazky` neexistují. Resp. asi mě vypekl ten `{% if obrazky %}`, protože ten je oficiálně dělaný na to, aby to neexistovalo. (Still bad design imho, ale co už…)data/groups.json819f521432@ledoian wrote in #99 (comment):
Než to zapomenu:
ffmpeg -i tmp/Kosticka1.ogv -vcodec libx264 -acodec libopus tmp/Kosticka1.mp4fungovalo (asi by chtělo potunit, aby se nekódovalo na CPU pokud nemusí, ale tohle je asi rozumný začátek)Co se kodeků videa týče: teoreticky jde nabídnout prohližeči víc různých ekvivalentních souborů pomocí
<source>. Fakt hodně se mi to nechce dělat, protože to znamená mít pro Soubor víc souborů a nějak to pohandlovat, a zní mi jako pain jak vyrobit příčetný frontend/UX, tak to reprezentovat v modelu, tak na to brát ohled v čemkoliv, co zpracovává galerie.Takže to dělat nebudu, bude dovolený jeden kodek a org zařídí, že se video zkonvertuje… (A audio kodek možná nakonec nebude Opus, ale AAC, protože podpora Opusu v MP4 přibyla pozdě…)
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.