Adding new "manual_skip" field; adapt UI
This commit is contained in:
		
							parent
							
								
									dc5491455c
								
							
						
					
					
						commit
						977f996d8e
					
				| 
						 | 
					@ -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'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -679,7 +679,13 @@ class Media(models.Model):
 | 
				
			||||||
        _('skip'),
 | 
					        _('skip'),
 | 
				
			||||||
        db_index=True,
 | 
					        db_index=True,
 | 
				
			||||||
        default=False,
 | 
					        default=False,
 | 
				
			||||||
        help_text=_('Media will be skipped and not downloaded')
 | 
					        help_text=_('INTERNAL FLAG - Media will be skipped and not downloaded')
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    manual_skip = models.BooleanField(
 | 
				
			||||||
 | 
					        _('manual_skip'),
 | 
				
			||||||
 | 
					        db_index=True,
 | 
				
			||||||
 | 
					        default=False,
 | 
				
			||||||
 | 
					        help_text=_('Media marked as "skipped", won\' be downloaded')
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    downloaded = models.BooleanField(
 | 
					    downloaded = models.BooleanField(
 | 
				
			||||||
        _('downloaded'),
 | 
					        _('downloaded'),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,6 +93,10 @@ def task_task_failed(sender, task_id, completed_task, **kwargs):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@receiver(post_save, sender=Media)
 | 
					@receiver(post_save, sender=Media)
 | 
				
			||||||
def media_post_save(sender, instance, created, **kwargs):
 | 
					def media_post_save(sender, instance, created, **kwargs):
 | 
				
			||||||
 | 
					    # If the media is skipped manually, bail.
 | 
				
			||||||
 | 
					    if instance.manual_skip:
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Triggered after media is saved
 | 
					    # Triggered after media is saved
 | 
				
			||||||
    cap_changed = False
 | 
					    cap_changed = False
 | 
				
			||||||
    can_download_changed = False
 | 
					    can_download_changed = False
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -223,6 +223,11 @@ def download_media_metadata(media_id):
 | 
				
			||||||
        log.error(f'Task download_media_metadata(pk={media_id}) called but no '
 | 
					        log.error(f'Task download_media_metadata(pk={media_id}) called but no '
 | 
				
			||||||
                  f'media exists with ID: {media_id}')
 | 
					                  f'media exists with ID: {media_id}')
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if media.manual_skip:
 | 
				
			||||||
 | 
					        log.info(f'Task for ID: {media_id} skipped, due to task being manually skipped.')
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    source = media.source
 | 
					    source = media.source
 | 
				
			||||||
    metadata = media.index_metadata()
 | 
					    metadata = media.index_metadata()
 | 
				
			||||||
    media.metadata = json.dumps(metadata, default=json_serial)
 | 
					    media.metadata = json.dumps(metadata, default=json_serial)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,11 @@
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					{% if media.manual_skip %}{% include 'errorbox.html' with message='Media is marked to be skipped and will not be downloaded.' %}
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
  {% if not media.can_download %}{% include 'errorbox.html' with message='Media cannot be downloaded because it has no formats which match the source requirements.' %}{% endif %}
 | 
					  {% if not media.can_download %}{% include 'errorbox.html' with message='Media cannot be downloaded because it has no formats which match the source requirements.' %}{% endif %}
 | 
				
			||||||
{% if media.skip %}{% include 'errorbox.html' with message='Media is marked to be skipped and will not be downloaded.' %}{% endif %}
 | 
					  {% if media.skip %}{% include 'errorbox.html' with message='This media may be skipped due to error(s).' %}{% endif %}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
{% include 'infobox.html' with message=message %}
 | 
					{% include 'infobox.html' with message=message %}
 | 
				
			||||||
<div class="row">
 | 
					<div class="row">
 | 
				
			||||||
  <div class="col s12 m7">
 | 
					  <div class="col s12 m7">
 | 
				
			||||||
| 
						 | 
					@ -167,10 +170,10 @@
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
<div class="row">
 | 
					<div class="row">
 | 
				
			||||||
  <div class="col s12">
 | 
					  <div class="col s12">
 | 
				
			||||||
    {% if media.skip %}
 | 
					    {% if media.manual_skip %}
 | 
				
			||||||
      <a href="{% url 'sync:enable-media' pk=media.pk %}" class="btn">Enable (unskip) media <i class="fas fa-cloud-download-alt"></i></a>
 | 
					      <a href="{% url 'sync:enable-media' pk=media.pk %}" class="btn">Unskip media (manually) <i class="fas fa-cloud-download-alt"></i></a>
 | 
				
			||||||
    {% else %}
 | 
					    {% else %}
 | 
				
			||||||
      <a href="{% url 'sync:skip-media' pk=media.pk %}" class="btn delete-button">Skip media <i class="fas fa-times-circle"></i></a>
 | 
					      <a href="{% url 'sync:skip-media' pk=media.pk %}" class="btn delete-button">Manually mark media to be skipped <i class="fas fa-times-circle"></i></a>
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,8 +36,10 @@
 | 
				
			||||||
            {% if m.downloaded %}
 | 
					            {% if m.downloaded %}
 | 
				
			||||||
              <i class="fas fa-check-circle" title="Downloaded"></i> {{ m.download_date|date:'Y-m-d' }}
 | 
					              <i class="fas fa-check-circle" title="Downloaded"></i> {{ m.download_date|date:'Y-m-d' }}
 | 
				
			||||||
            {% else %}
 | 
					            {% else %}
 | 
				
			||||||
              {% if m.skip %}
 | 
					              {% if m.manual_skip %}
 | 
				
			||||||
              <span class="error-text"><i class="fas fa-times" title="Skipping media"></i> Skipped</span>
 | 
					              <span class="error-text"><i class="fas fa-times" title="Skipping media"></i> Manually skipped</span>
 | 
				
			||||||
 | 
					              {% elif m.skip %}
 | 
				
			||||||
 | 
					              <span class="error-text"><i class="fas fa-times" title="Skipping media"></i> Skipped by system</span>
 | 
				
			||||||
              {% elif not m.source.download_media %}
 | 
					              {% elif not m.source.download_media %}
 | 
				
			||||||
              <span class="error-text"><i class="fas fa-times" title="Not downloading media for this source"></i> Disabled at source</span>
 | 
					              <span class="error-text"><i class="fas fa-times" title="Not downloading media for this source"></i> Disabled at source</span>
 | 
				
			||||||
              {% elif not m.has_metadata %}
 | 
					              {% elif not m.has_metadata %}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -486,16 +486,16 @@ class MediaView(ListView):
 | 
				
			||||||
            if self.show_skipped:
 | 
					            if self.show_skipped:
 | 
				
			||||||
                q = Media.objects.filter(source=self.filter_source)
 | 
					                q = Media.objects.filter(source=self.filter_source)
 | 
				
			||||||
            elif self.only_skipped:
 | 
					            elif self.only_skipped:
 | 
				
			||||||
                q = Media.objects.filter(source=self.filter_source, skip=True)
 | 
					                q = Media.objects.filter(Q(source=self.filter_source) & (Q(skip=True) | Q(manual_skip=True)))
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                q = Media.objects.filter(source=self.filter_source, skip=False)
 | 
					                q = Media.objects.filter(Q(source=self.filter_source) & (Q(skip=False) & Q(manual_skip=False)))
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            if self.show_skipped:
 | 
					            if self.show_skipped:
 | 
				
			||||||
                q = Media.objects.all()
 | 
					                q = Media.objects.all()
 | 
				
			||||||
            elif self.only_skipped:
 | 
					            elif self.only_skipped:
 | 
				
			||||||
                q = Media.objects.filter(skip=True)
 | 
					                q = Media.objects.filter(Q(skip=True)|Q(manual_skip=True))
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                q = Media.objects.filter(skip=False)
 | 
					                q = Media.objects.filter(Q(skip=False)&Q(manual_skip=False))
 | 
				
			||||||
        return q.order_by('-published', '-created')
 | 
					        return q.order_by('-published', '-created')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_context_data(self, *args, **kwargs):
 | 
					    def get_context_data(self, *args, **kwargs):
 | 
				
			||||||
| 
						 | 
					@ -667,6 +667,7 @@ class MediaSkipView(FormView, SingleObjectMixin):
 | 
				
			||||||
        self.object.downloaded_filesize = None
 | 
					        self.object.downloaded_filesize = None
 | 
				
			||||||
        # Mark it to be skipped
 | 
					        # Mark it to be skipped
 | 
				
			||||||
        self.object.skip = True
 | 
					        self.object.skip = True
 | 
				
			||||||
 | 
					        self.object.manual_skip = True
 | 
				
			||||||
        self.object.save()
 | 
					        self.object.save()
 | 
				
			||||||
        return super().form_valid(form)
 | 
					        return super().form_valid(form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -695,6 +696,7 @@ class MediaEnableView(FormView, SingleObjectMixin):
 | 
				
			||||||
    def form_valid(self, form):
 | 
					    def form_valid(self, form):
 | 
				
			||||||
        # Mark it as not skipped
 | 
					        # Mark it as not skipped
 | 
				
			||||||
        self.object.skip = False
 | 
					        self.object.skip = False
 | 
				
			||||||
 | 
					        self.object.manual_skip = False
 | 
				
			||||||
        self.object.save()
 | 
					        self.object.save()
 | 
				
			||||||
        return super().form_valid(form)
 | 
					        return super().form_valid(form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue