From 6e97a24ec0a5882fe99f6636558a707d87a65a6a Mon Sep 17 00:00:00 2001 From: tcely Date: Thu, 24 Apr 2025 15:09:11 -0400 Subject: [PATCH] Restore all the individual files --- ..._auto_20210924_0554.py => 0001_initial.py} | 20 +-- .../migrations/0002_auto_20201213_0817.py | 20 +++ .../migrations/0003_source_copy_thumbnails.py | 18 +++ .../migrations/0004_source_media_format.py | 18 +++ .../migrations/0005_auto_20201219_0312.py | 18 +++ .../sync/migrations/0006_source_write_nfo.py | 18 +++ .../migrations/0007_auto_20201219_0645.py | 18 +++ .../migrations/0008_source_download_cap.py | 18 +++ .../migrations/0009_auto_20210218_0442.py | 30 ++++ .../migrations/0010_auto_20210924_0554.py | 30 ++++ .../migrations/0011_auto_20220201_1654.py | 21 +++ ...1_1654_squashed_0020_auto_20231024_1825.py | 130 ------------------ .../0012_alter_media_downloaded_format.py | 18 +++ .../migrations/0013_fix_elative_media_file.py | 25 ++++ .../migrations/0014_alter_media_media_file.py | 21 +++ .../migrations/0015_auto_20230213_0603.py | 23 ++++ .../migrations/0016_auto_20230214_2052.py | 34 +++++ ...17_alter_source_sponsorblock_categories.py | 19 +++ .../sync/migrations/0018_source_subtitles.py | 27 ++++ .../0019_add_delete_removed_media.py | 17 +++ .../migrations/0020_auto_20231024_1825.py | 29 ++++ .../0021_source_copy_channel_images.py | 2 +- 22 files changed, 428 insertions(+), 146 deletions(-) rename tubesync/sync/migrations/{0001_initial_squashed_0010_auto_20210924_0554.py => 0001_initial.py} (82%) create mode 100644 tubesync/sync/migrations/0002_auto_20201213_0817.py create mode 100644 tubesync/sync/migrations/0003_source_copy_thumbnails.py create mode 100644 tubesync/sync/migrations/0004_source_media_format.py create mode 100644 tubesync/sync/migrations/0005_auto_20201219_0312.py create mode 100644 tubesync/sync/migrations/0006_source_write_nfo.py create mode 100644 tubesync/sync/migrations/0007_auto_20201219_0645.py create mode 100644 tubesync/sync/migrations/0008_source_download_cap.py create mode 100644 tubesync/sync/migrations/0009_auto_20210218_0442.py create mode 100644 tubesync/sync/migrations/0010_auto_20210924_0554.py create mode 100644 tubesync/sync/migrations/0011_auto_20220201_1654.py delete mode 100644 tubesync/sync/migrations/0011_auto_20220201_1654_squashed_0020_auto_20231024_1825.py create mode 100644 tubesync/sync/migrations/0012_alter_media_downloaded_format.py create mode 100644 tubesync/sync/migrations/0013_fix_elative_media_file.py create mode 100644 tubesync/sync/migrations/0014_alter_media_media_file.py create mode 100644 tubesync/sync/migrations/0015_auto_20230213_0603.py create mode 100644 tubesync/sync/migrations/0016_auto_20230214_2052.py create mode 100644 tubesync/sync/migrations/0017_alter_source_sponsorblock_categories.py create mode 100644 tubesync/sync/migrations/0018_source_subtitles.py create mode 100644 tubesync/sync/migrations/0019_add_delete_removed_media.py create mode 100644 tubesync/sync/migrations/0020_auto_20231024_1825.py diff --git a/tubesync/sync/migrations/0001_initial_squashed_0010_auto_20210924_0554.py b/tubesync/sync/migrations/0001_initial.py similarity index 82% rename from tubesync/sync/migrations/0001_initial_squashed_0010_auto_20210924_0554.py rename to tubesync/sync/migrations/0001_initial.py index 16ab1018..aa267a9a 100644 --- a/tubesync/sync/migrations/0001_initial_squashed_0010_auto_20210924_0554.py +++ b/tubesync/sync/migrations/0001_initial.py @@ -1,15 +1,10 @@ -# Generated by Django 5.1.8 on 2025-04-24 01:54 +# Generated by Django 3.1.4 on 2020-12-12 09:13 import django.core.files.storage +from django.db import migrations, models import django.db.models.deletion import sync.models import uuid -from django.conf import settings -from django.db import migrations, models - - -def media_file_location(): - return str(settings.DOWNLOAD_ROOT) class Migration(migrations.Migration): @@ -26,11 +21,11 @@ class Migration(migrations.Migration): ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, help_text='UUID of the source', primary_key=True, serialize=False, verbose_name='uuid')), ('created', models.DateTimeField(auto_now_add=True, db_index=True, help_text='Date and time the source was created', verbose_name='created')), ('last_crawl', models.DateTimeField(blank=True, db_index=True, help_text='Date and time the source was last crawled', null=True, verbose_name='last crawl')), - ('source_type', models.CharField(choices=[('c', 'YouTube channel'), ('i', 'YouTube channel by ID'), ('p', 'YouTube playlist')], db_index=True, default='c', help_text='Source type', max_length=1, verbose_name='source type')), + ('source_type', models.CharField(choices=[('c', 'YouTube channel'), ('p', 'YouTube playlist')], db_index=True, default='c', help_text='Source type', max_length=1, verbose_name='source type')), ('key', models.CharField(db_index=True, help_text='Source key, such as exact YouTube channel name or playlist ID', max_length=100, unique=True, verbose_name='key')), ('name', models.CharField(db_index=True, help_text='Friendly name for the source, used locally in TubeSync only', max_length=100, unique=True, verbose_name='name')), ('directory', models.CharField(db_index=True, help_text='Directory name to save the media into', max_length=100, unique=True, verbose_name='directory')), - ('index_schedule', models.IntegerField(choices=[(3600, 'Every hour'), (7200, 'Every 2 hours'), (10800, 'Every 3 hours'), (14400, 'Every 4 hours'), (18000, 'Every 5 hours'), (21600, 'Every 6 hours'), (43200, 'Every 12 hours'), (86400, 'Every 24 hours'), (259200, 'Every 3 days'), (604800, 'Every 7 days'), (0, 'Never')], db_index=True, default=86400, help_text='Schedule of how often to index the source for new media', verbose_name='index schedule')), + ('index_schedule', models.IntegerField(choices=[(3600, 'Every hour'), (7200, 'Every 2 hours'), (10800, 'Every 3 hours'), (14400, 'Every 4 hours'), (18000, 'Every 5 hours'), (21600, 'Every 6 hours'), (43200, 'Every 12 hours'), (86400, 'Every 24 hours')], db_index=True, default=21600, help_text='Schedule of how often to index the source for new media', verbose_name='index schedule')), ('delete_old_media', models.BooleanField(default=False, help_text='Delete old media after "days to keep" days?', verbose_name='delete old media')), ('days_to_keep', models.PositiveSmallIntegerField(default=14, help_text='If "delete old media" is ticked, the number of days after which to automatically delete media', verbose_name='days to keep')), ('source_resolution', models.CharField(choices=[('360p', '360p (SD)'), ('480p', '480p (SD)'), ('720p', '720p (HD)'), ('1080p', '1080p (Full HD)'), ('1440p', '1440p (2K)'), ('2160p', '2160p (4K)'), ('4320p', '4320p (8K)'), ('audio', 'Audio only')], db_index=True, default='1080p', help_text='Source resolution, desired video resolution to download', max_length=8, verbose_name='source resolution')), @@ -40,11 +35,6 @@ class Migration(migrations.Migration): ('prefer_hdr', models.BooleanField(default=False, help_text='Where possible, prefer HDR media for this source', verbose_name='prefer hdr')), ('fallback', models.CharField(choices=[('f', 'Fail, do not download any media'), ('n', 'Get next best resolution or codec instead'), ('h', 'Get next best resolution but at least HD')], db_index=True, default='h', help_text='What do do when media in your source resolution and codecs is not available', max_length=1, verbose_name='fallback')), ('has_failed', models.BooleanField(default=False, help_text='Source has failed to index media', verbose_name='has failed')), - ('copy_thumbnails', models.BooleanField(default=False, help_text='Copy thumbnails with the media, these may be detected and used by some media servers', verbose_name='copy thumbnails')), - ('media_format', models.CharField(default='{yyyy_mm_dd}_{source}_{title}_{key}_{format}.{ext}', help_text='File format to use for saving files, detailed options at bottom of page.', max_length=200, verbose_name='media format')), - ('write_nfo', models.BooleanField(default=False, help_text='Write an NFO file in XML with the media info, these may be detected and used by some media servers', verbose_name='write nfo')), - ('download_cap', models.IntegerField(choices=[(0, 'No cap'), (604800, '1 week (7 days)'), (2592000, '1 month (30 days)'), (7776000, '3 months (90 days)'), (15552000, '6 months (180 days)'), (31536000, '1 year (365 days)'), (63072000, '2 years (730 days)'), (94608000, '3 years (1095 days)'), (157680000, '5 years (1825 days)'), (315360000, '10 years (3650 days)')], default=0, help_text='Do not download media older than this capped date', verbose_name='download cap')), - ('download_media', models.BooleanField(default=True, help_text='Download media from this source, if not selected the source will only be indexed', verbose_name='download media')), ], options={ 'verbose_name': 'Source', @@ -80,7 +70,7 @@ class Migration(migrations.Migration): ('thumb_height', models.PositiveSmallIntegerField(blank=True, help_text='Height (Y) of the thumbnail', null=True, verbose_name='thumb height')), ('metadata', models.TextField(blank=True, help_text='JSON encoded metadata for the media', null=True, verbose_name='metadata')), ('can_download', models.BooleanField(db_index=True, default=False, help_text='Media has a matching format and can be downloaded', verbose_name='can download')), - ('media_file', models.FileField(blank=True, help_text='Media file', max_length=255, null=True, storage=django.core.files.storage.FileSystemStorage(location=media_file_location()), upload_to=sync.models.get_media_file_path, verbose_name='media file')), + ('media_file', models.FileField(blank=True, help_text='Media file', max_length=200, null=True, storage=django.core.files.storage.FileSystemStorage(location='/home/meeb/Repos/github.com/meeb/tubesync/tubesync/downloads'), upload_to=sync.models.get_media_file_path, verbose_name='media file')), ('skip', models.BooleanField(db_index=True, default=False, help_text='Media will be skipped and not downloaded', verbose_name='skip')), ('downloaded', models.BooleanField(db_index=True, default=False, help_text='Media has been downloaded', verbose_name='downloaded')), ('download_date', models.DateTimeField(blank=True, db_index=True, help_text='Date and time the download completed', null=True, verbose_name='download date')), diff --git a/tubesync/sync/migrations/0002_auto_20201213_0817.py b/tubesync/sync/migrations/0002_auto_20201213_0817.py new file mode 100644 index 00000000..ab2f71e3 --- /dev/null +++ b/tubesync/sync/migrations/0002_auto_20201213_0817.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.4 on 2020-12-13 08:17 + +import django.core.files.storage +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='media', + name='media_file', + field=models.FileField(blank=True, help_text='Media file', max_length=200, null=True, storage=django.core.files.storage.FileSystemStorage(location='/downloads'), upload_to=sync.models.get_media_file_path, verbose_name='media file'), + ), + ] diff --git a/tubesync/sync/migrations/0003_source_copy_thumbnails.py b/tubesync/sync/migrations/0003_source_copy_thumbnails.py new file mode 100644 index 00000000..7bdbfdbc --- /dev/null +++ b/tubesync/sync/migrations/0003_source_copy_thumbnails.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-18 01:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0002_auto_20201213_0817'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='copy_thumbnails', + field=models.BooleanField(default=False, help_text='Copy thumbnails with the media, these may be detected and used by some media servers', verbose_name='copy thumbnails'), + ), + ] diff --git a/tubesync/sync/migrations/0004_source_media_format.py b/tubesync/sync/migrations/0004_source_media_format.py new file mode 100644 index 00000000..f79a7036 --- /dev/null +++ b/tubesync/sync/migrations/0004_source_media_format.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-18 01:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0003_source_copy_thumbnails'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='media_format', + field=models.CharField(default='{yyyymmdd}_{source}_{title}_{key}_{format}.{ext}', help_text='File format to use for saving files', max_length=200, verbose_name='media format'), + ), + ] diff --git a/tubesync/sync/migrations/0005_auto_20201219_0312.py b/tubesync/sync/migrations/0005_auto_20201219_0312.py new file mode 100644 index 00000000..11ee8e27 --- /dev/null +++ b/tubesync/sync/migrations/0005_auto_20201219_0312.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-19 03:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0004_source_media_format'), + ] + + operations = [ + migrations.AlterField( + model_name='source', + name='source_type', + field=models.CharField(choices=[('c', 'YouTube channel'), ('i', 'YouTube channel by ID'), ('p', 'YouTube playlist')], db_index=True, default='c', help_text='Source type', max_length=1, verbose_name='source type'), + ), + ] diff --git a/tubesync/sync/migrations/0006_source_write_nfo.py b/tubesync/sync/migrations/0006_source_write_nfo.py new file mode 100644 index 00000000..d5fe9365 --- /dev/null +++ b/tubesync/sync/migrations/0006_source_write_nfo.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-19 03:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0005_auto_20201219_0312'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='write_nfo', + field=models.BooleanField(default=False, help_text='Write an NFO file with the media, these may be detected and used by some media servers', verbose_name='write nfo'), + ), + ] diff --git a/tubesync/sync/migrations/0007_auto_20201219_0645.py b/tubesync/sync/migrations/0007_auto_20201219_0645.py new file mode 100644 index 00000000..c757d679 --- /dev/null +++ b/tubesync/sync/migrations/0007_auto_20201219_0645.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-19 06:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0006_source_write_nfo'), + ] + + operations = [ + migrations.AlterField( + model_name='source', + name='write_nfo', + field=models.BooleanField(default=False, help_text='Write an NFO file in XML with the media info, these may be detected and used by some media servers', verbose_name='write nfo'), + ), + ] diff --git a/tubesync/sync/migrations/0008_source_download_cap.py b/tubesync/sync/migrations/0008_source_download_cap.py new file mode 100644 index 00000000..4b3ec19f --- /dev/null +++ b/tubesync/sync/migrations/0008_source_download_cap.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2020-12-19 06:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0007_auto_20201219_0645'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='download_cap', + field=models.IntegerField(choices=[(0, 'No cap'), (604800, '1 week (7 days)'), (2592000, '1 month (30 days)'), (7776000, '3 months (90 days)'), (15552000, '6 months (180 days)'), (31536000, '1 year (365 days)'), (63072000, '2 years (730 days)'), (94608000, '3 years (1095 days)'), (157680000, '5 years (1825 days)'), (315360000, '10 years (3650 days)')], default=0, help_text='Do not download media older than this capped date', verbose_name='download cap'), + ), + ] diff --git a/tubesync/sync/migrations/0009_auto_20210218_0442.py b/tubesync/sync/migrations/0009_auto_20210218_0442.py new file mode 100644 index 00000000..45b94500 --- /dev/null +++ b/tubesync/sync/migrations/0009_auto_20210218_0442.py @@ -0,0 +1,30 @@ +# Generated by Django 3.1.6 on 2021-02-18 04:42 + +import django.core.files.storage +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0008_source_download_cap'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='download_media', + field=models.BooleanField(default=True, help_text='Download media from this source, if not selected the source will only be indexed', verbose_name='download media'), + ), + migrations.AlterField( + model_name='media', + name='media_file', + field=models.FileField(blank=True, help_text='Media file', max_length=200, null=True, storage=django.core.files.storage.FileSystemStorage(location='/home/meeb/Repos/github.com/meeb/tubesync/tubesync/downloads'), upload_to=sync.models.get_media_file_path, verbose_name='media file'), + ), + migrations.AlterField( + model_name='source', + name='media_format', + field=models.CharField(default='{yyyymmdd}_{source}_{title}_{key}_{format}.{ext}', help_text='File format to use for saving files, detailed options at bottom of page.', max_length=200, verbose_name='media format'), + ), + ] diff --git a/tubesync/sync/migrations/0010_auto_20210924_0554.py b/tubesync/sync/migrations/0010_auto_20210924_0554.py new file mode 100644 index 00000000..00160610 --- /dev/null +++ b/tubesync/sync/migrations/0010_auto_20210924_0554.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.7 on 2021-09-24 05:54 + +import django.core.files.storage +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0009_auto_20210218_0442'), + ] + + operations = [ + migrations.AlterField( + model_name='media', + name='media_file', + field=models.FileField(blank=True, help_text='Media file', max_length=255, null=True, storage=django.core.files.storage.FileSystemStorage(location='/home/meeb/Repos/github.com/meeb/tubesync/tubesync/downloads'), upload_to=sync.models.get_media_file_path, verbose_name='media file'), + ), + migrations.AlterField( + model_name='source', + name='index_schedule', + field=models.IntegerField(choices=[(3600, 'Every hour'), (7200, 'Every 2 hours'), (10800, 'Every 3 hours'), (14400, 'Every 4 hours'), (18000, 'Every 5 hours'), (21600, 'Every 6 hours'), (43200, 'Every 12 hours'), (86400, 'Every 24 hours'), (259200, 'Every 3 days'), (604800, 'Every 7 days'), (0, 'Never')], db_index=True, default=86400, help_text='Schedule of how often to index the source for new media', verbose_name='index schedule'), + ), + migrations.AlterField( + model_name='source', + name='media_format', + field=models.CharField(default='{yyyy_mm_dd}_{source}_{title}_{key}_{format}.{ext}', help_text='File format to use for saving files, detailed options at bottom of page.', max_length=200, verbose_name='media format'), + ), + ] diff --git a/tubesync/sync/migrations/0011_auto_20220201_1654.py b/tubesync/sync/migrations/0011_auto_20220201_1654.py new file mode 100644 index 00000000..96d9f4a7 --- /dev/null +++ b/tubesync/sync/migrations/0011_auto_20220201_1654.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.11 on 2022-02-01 16:54 + +import django.core.files.storage +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0010_auto_20210924_0554'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='write_json', + field=models.BooleanField( + default=False, help_text='Write a JSON file with the media info, these may be detected and used by some media servers', verbose_name='write json'), + ), + ] diff --git a/tubesync/sync/migrations/0011_auto_20220201_1654_squashed_0020_auto_20231024_1825.py b/tubesync/sync/migrations/0011_auto_20220201_1654_squashed_0020_auto_20231024_1825.py deleted file mode 100644 index 11d1268b..00000000 --- a/tubesync/sync/migrations/0011_auto_20220201_1654_squashed_0020_auto_20231024_1825.py +++ /dev/null @@ -1,130 +0,0 @@ -# Generated by Django 5.1.8 on 2025-04-24 01:55 - -import django.core.files.storage -import django.core.validators -import sync.fields -import sync.models -from django.db import migrations, models - - -# Functions from the following migrations need manual copying. -# Move them and any dependencies into this file, then update the -# RunPython operations to refer to the local versions: -# sync.migrations.0013_fix_elative_media_file -from django.conf import settings -from pathlib import Path - -def fix_media_file(apps, schema_editor): - Media = apps.get_model('sync', 'Media') - download_dir = str(settings.DOWNLOAD_ROOT) - download_dir_path = Path(download_dir) - for media in Media.objects.filter(downloaded=True): - if media.media_file.path.startswith(download_dir): - media_path = Path(media.media_file.path) - relative_path = media_path.relative_to(download_dir_path) - media.media_file.name = str(relative_path) - media.save() - -# Function above has been copied/modified and RunPython operations adjusted. - -def media_file_location(): - return str(settings.DOWNLOAD_ROOT) - -# Used the above function for storage location. - - -class Migration(migrations.Migration): - - replaces = [ - ('sync', '0011_auto_20220201_1654'), - ('sync', '0012_alter_media_downloaded_format'), - ('sync', '0013_fix_elative_media_file'), - ('sync', '0014_alter_media_media_file'), - ('sync', '0015_auto_20230213_0603'), - ('sync', '0016_auto_20230214_2052'), - ('sync', '0017_alter_source_sponsorblock_categories'), - ('sync', '0018_source_subtitles'), - ('sync', '0019_add_delete_removed_media'), - ('sync', '0020_auto_20231024_1825'), - ] - - dependencies = [ - ('sync', '0001_initial_squashed_0010_auto_20210924_0554'), - ] - - operations = [ - migrations.AddField( - model_name='source', - name='write_json', - field=models.BooleanField(default=False, help_text='Write a JSON file with the media info, these may be detected and used by some media servers', verbose_name='write json'), - ), - migrations.AlterField( - model_name='media', - name='downloaded_format', - field=models.CharField(blank=True, help_text='Video format (resolution) of the downloaded media', max_length=30, null=True, verbose_name='downloaded format'), - ), - migrations.RunPython( - code=fix_media_file, - reverse_code=migrations.RunPython.noop, - ), - migrations.AlterField( - model_name='media', - name='media_file', - field=models.FileField(blank=True, help_text='Media file', max_length=255, null=True, storage=django.core.files.storage.FileSystemStorage(base_url='/media-data/', location=media_file_location()), upload_to=sync.models.get_media_file_path, verbose_name='media file'), - ), - migrations.AddField( - model_name='media', - name='manual_skip', - field=models.BooleanField(db_index=True, default=False, help_text='Media marked as "skipped", won\' be downloaded', verbose_name='manual_skip'), - ), - migrations.AlterField( - model_name='media', - name='skip', - field=models.BooleanField(db_index=True, default=False, help_text='INTERNAL FLAG - Media will be skipped and not downloaded', verbose_name='skip'), - ), - migrations.AddField( - model_name='source', - name='embed_metadata', - field=models.BooleanField(default=False, help_text='Embed metadata from source into file', verbose_name='embed metadata'), - ), - migrations.AddField( - model_name='source', - name='embed_thumbnail', - field=models.BooleanField(default=False, help_text='Embed thumbnail into the file', verbose_name='embed thumbnail'), - ), - migrations.AddField( - model_name='source', - name='enable_sponsorblock', - field=models.BooleanField(default=True, help_text='Use SponsorBlock?', verbose_name='enable sponsorblock'), - ), - migrations.AddField( - model_name='source', - name='sponsorblock_categories', - field=sync.fields.CommaSepChoiceField(default='all', help_text='Select the sponsorblocks you want to enforce', max_length=128, possible_choices=('', ''), separator=','), - ), - migrations.AddField( - model_name='source', - name='write_subtitles', - field=models.BooleanField(default=False, help_text='Download video subtitles', verbose_name='write subtitles'), - ), - migrations.AddField( - model_name='source', - name='delete_removed_media', - field=models.BooleanField(default=False, help_text='Delete media that is no longer on this playlist', verbose_name='delete removed media'), - ), - migrations.AddField( - model_name='source', - name='filter_text', - field=models.CharField(blank=True, default='', help_text='Regex compatible filter string for video titles', max_length=100, verbose_name='filter string'), - ), - migrations.AddField( - model_name='source', - name='auto_subtitles', - field=models.BooleanField(default=False, help_text='Accept auto-generated subtitles', verbose_name='accept auto-generated subs'), - ), - migrations.AddField( - model_name='source', - name='sub_langs', - field=models.CharField(default='en', help_text='List of subtitles langs to download, comma-separated. Example: en,fr or all,-fr,-live_chat', max_length=30, validators=[django.core.validators.RegexValidator(message='Subtitle langs must be a comma-separated list of langs. example: en,fr or all,-fr,-live_chat', regex='^(\\-?[\\_\\.a-zA-Z]+,)*(\\-?[\\_\\.a-zA-Z]+){1}$')], verbose_name='subs langs'), - ), - ] diff --git a/tubesync/sync/migrations/0012_alter_media_downloaded_format.py b/tubesync/sync/migrations/0012_alter_media_downloaded_format.py new file mode 100644 index 00000000..3e733efb --- /dev/null +++ b/tubesync/sync/migrations/0012_alter_media_downloaded_format.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-04-06 06:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0011_auto_20220201_1654'), + ] + + operations = [ + migrations.AlterField( + model_name='media', + name='downloaded_format', + field=models.CharField(blank=True, help_text='Video format (resolution) of the downloaded media', max_length=30, null=True, verbose_name='downloaded format'), + ), + ] diff --git a/tubesync/sync/migrations/0013_fix_elative_media_file.py b/tubesync/sync/migrations/0013_fix_elative_media_file.py new file mode 100644 index 00000000..c9eee22e --- /dev/null +++ b/tubesync/sync/migrations/0013_fix_elative_media_file.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2022-04-06 06:19 + +from django.conf import settings +from django.db import migrations, models + + +def fix_media_file(apps, schema_editor): + Media = apps.get_model('sync', 'Media') + for media in Media.objects.filter(downloaded=True): + download_dir = str(settings.DOWNLOAD_ROOT) + + if media.media_file.name.startswith(download_dir): + media.media_file.name = media.media_file.name[len(download_dir) + 1:] + media.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0012_alter_media_downloaded_format'), + ] + + operations = [ + migrations.RunPython(fix_media_file) + ] diff --git a/tubesync/sync/migrations/0014_alter_media_media_file.py b/tubesync/sync/migrations/0014_alter_media_media_file.py new file mode 100644 index 00000000..530c8e81 --- /dev/null +++ b/tubesync/sync/migrations/0014_alter_media_media_file.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.15 on 2022-12-28 20:33 + +import django.core.files.storage +from django.conf import settings +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0013_fix_elative_media_file'), + ] + + operations = [ + migrations.AlterField( + model_name='media', + name='media_file', + field=models.FileField(blank=True, help_text='Media file', max_length=255, null=True, storage=django.core.files.storage.FileSystemStorage(base_url='/media-data/', location=str(settings.DOWNLOAD_ROOT)), upload_to=sync.models.get_media_file_path, verbose_name='media file'), + ), + ] diff --git a/tubesync/sync/migrations/0015_auto_20230213_0603.py b/tubesync/sync/migrations/0015_auto_20230213_0603.py new file mode 100644 index 00000000..54592f9d --- /dev/null +++ b/tubesync/sync/migrations/0015_auto_20230213_0603.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.17 on 2023-02-13 06:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0014_alter_media_media_file'), + ] + + operations = [ + migrations.AddField( + model_name='media', + name='manual_skip', + field=models.BooleanField(db_index=True, default=False, help_text='Media marked as "skipped", won\' be downloaded', verbose_name='manual_skip'), + ), + migrations.AlterField( + model_name='media', + name='skip', + field=models.BooleanField(db_index=True, default=False, help_text='INTERNAL FLAG - Media will be skipped and not downloaded', verbose_name='skip'), + ), + ] diff --git a/tubesync/sync/migrations/0016_auto_20230214_2052.py b/tubesync/sync/migrations/0016_auto_20230214_2052.py new file mode 100644 index 00000000..ffba1952 --- /dev/null +++ b/tubesync/sync/migrations/0016_auto_20230214_2052.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.18 on 2023-02-14 20:52 + +from django.db import migrations, models +import sync.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0015_auto_20230213_0603'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='embed_metadata', + field=models.BooleanField(default=False, help_text='Embed metadata from source into file', verbose_name='embed metadata'), + ), + migrations.AddField( + model_name='source', + name='embed_thumbnail', + field=models.BooleanField(default=False, help_text='Embed thumbnail into the file', verbose_name='embed thumbnail'), + ), + migrations.AddField( + model_name='source', + name='enable_sponsorblock', + field=models.BooleanField(default=True, help_text='Use SponsorBlock?', verbose_name='enable sponsorblock'), + ), + migrations.AddField( + model_name='source', + name='sponsorblock_categories', + field=sync.models.CommaSepChoiceField(default='all', possible_choices=(('all', 'All'), ('sponsor', 'Sponsor'), ('intro', 'Intermission/Intro Animation'), ('outro', 'Endcards/Credits'), ('selfpromo', 'Unpaid/Self Promotion'), ('preview', 'Preview/Recap'), ('filler', 'Filler Tangent'), ('interaction', 'Interaction Reminder'), ('music_offtopic', 'Non-Music Section'))), + ), + ] diff --git a/tubesync/sync/migrations/0017_alter_source_sponsorblock_categories.py b/tubesync/sync/migrations/0017_alter_source_sponsorblock_categories.py new file mode 100644 index 00000000..cc9d9578 --- /dev/null +++ b/tubesync/sync/migrations/0017_alter_source_sponsorblock_categories.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.18 on 2023-02-20 02:23 + +from django.db import migrations +import sync.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0016_auto_20230214_2052'), + ] + + operations = [ + migrations.AlterField( + model_name='source', + name='sponsorblock_categories', + field=sync.fields.CommaSepChoiceField(default='all', help_text='Select the sponsorblocks you want to enforce', separator=''), + ), + ] diff --git a/tubesync/sync/migrations/0018_source_subtitles.py b/tubesync/sync/migrations/0018_source_subtitles.py new file mode 100644 index 00000000..c526b994 --- /dev/null +++ b/tubesync/sync/migrations/0018_source_subtitles.py @@ -0,0 +1,27 @@ +# Generated by pac + +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0017_alter_source_sponsorblock_categories'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='write_subtitles', + field=models.BooleanField(default=False, help_text='Download video subtitles', verbose_name='write subtitles'), + ), + migrations.AddField( + model_name='source', + name='auto_subtitles', + field=models.BooleanField(default=False, help_text='Accept auto-generated subtitles', verbose_name='accept auto subtitles'), + ), + migrations.AddField( + model_name='source', + name='sub_langs', + field=models.CharField(default='en', help_text='List of subtitles langs to download comma-separated. Example: en,fr',max_length=30), + ), + ] diff --git a/tubesync/sync/migrations/0019_add_delete_removed_media.py b/tubesync/sync/migrations/0019_add_delete_removed_media.py new file mode 100644 index 00000000..0762be87 --- /dev/null +++ b/tubesync/sync/migrations/0019_add_delete_removed_media.py @@ -0,0 +1,17 @@ +# Generated by pac + +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0018_source_subtitles'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='delete_removed_media', + field=models.BooleanField(default=False, help_text='Delete media that is no longer on this playlist', verbose_name='delete removed media'), + ), + ] diff --git a/tubesync/sync/migrations/0020_auto_20231024_1825.py b/tubesync/sync/migrations/0020_auto_20231024_1825.py new file mode 100644 index 00000000..295339a8 --- /dev/null +++ b/tubesync/sync/migrations/0020_auto_20231024_1825.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.22 on 2023-10-24 17:25 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sync', '0019_add_delete_removed_media'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='filter_text', + field=models.CharField(blank=True, default='', help_text='Regex compatible filter string for video titles', max_length=100, verbose_name='filter string'), + ), + migrations.AlterField( + model_name='source', + name='auto_subtitles', + field=models.BooleanField(default=False, help_text='Accept auto-generated subtitles', verbose_name='accept auto-generated subs'), + ), + migrations.AlterField( + model_name='source', + name='sub_langs', + field=models.CharField(default='en', help_text='List of subtitles langs to download, comma-separated. Example: en,fr or all,-fr,-live_chat', max_length=30, validators=[django.core.validators.RegexValidator(message='Subtitle langs must be a comma-separated list of langs. example: en,fr or all,-fr,-live_chat', regex='^(\\-?[\\_\\.a-zA-Z]+,)*(\\-?[\\_\\.a-zA-Z]+){1}$')], verbose_name='subs langs'), + ), + ] diff --git a/tubesync/sync/migrations/0021_source_copy_channel_images.py b/tubesync/sync/migrations/0021_source_copy_channel_images.py index fce1f5be..5d568925 100644 --- a/tubesync/sync/migrations/0021_source_copy_channel_images.py +++ b/tubesync/sync/migrations/0021_source_copy_channel_images.py @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('sync', '0011_auto_20220201_1654_squashed_0020_auto_20231024_1825'), + ('sync', '0020_auto_20231024_1825'), ] operations = [