- Source.folders (Etiketten, Groß/Klein egal, max. 40 Zeichen); die bisherige Kategorie eines Blogs wird sein erster Ordner (Migration) - /feeds/folders/rename/ und /dissolve/; in den Blog-Einstellungen Häkchen je Ordner plus „Neuer Ordner“; langer Druck/Rechtsklick auf einen Ordner: öffnen, umbenennen, auflösen; Ordnerliste in „Feeds verwalten“ - Lesefortschritt je Post (Item.progress, geräteübergreifend): die Leseansicht springt zurück an die Stelle, ab 90 % gilt ein Blogpost als gelesen (Nachrichten weiter beim Öffnen); Fortschrittsbalken und „Weiterlesen“ oben in den Blogs - sw v95 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
# Generated by Django 6.1 on 2026-10-04 19:50
|
|
|
|
from django.db import migrations, models
|
|
|
|
|
|
def category_to_folders(apps, schema_editor):
|
|
"""A blog's folder was its category: now its first (only) folder."""
|
|
Source = apps.get_model('feeds', 'Source')
|
|
for s in Source.objects.filter(kind='blog').exclude(category=''):
|
|
s.folders = [s.category[:40]]
|
|
s.category = ''
|
|
s.save(update_fields=['folders', 'category'])
|
|
|
|
|
|
def folders_to_category(apps, schema_editor):
|
|
Source = apps.get_model('feeds', 'Source')
|
|
for s in Source.objects.filter(kind='blog'):
|
|
if s.folders:
|
|
s.category = s.folders[0]
|
|
s.save(update_fields=['category'])
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('feeds', '0004_item_notify'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name='item',
|
|
name='progress',
|
|
field=models.FloatField(default=0),
|
|
),
|
|
migrations.AddField(
|
|
model_name='item',
|
|
name='progress_at',
|
|
field=models.DateTimeField(blank=True, null=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='source',
|
|
name='folders',
|
|
field=models.JSONField(blank=True, default=list),
|
|
),
|
|
migrations.RunPython(category_to_folders, folders_to_category),
|
|
]
|