video.py 4.28 KB
# coding=utf8

from __future__ import unicode_literals, absolute_import, print_function

from django.conf import settings
from django.db import models
from django.utils import timezone

from gm_types.gaia import VIDEO_CODE_STATUS
from gm_types.mimas.qa import VIDEO_SOURCE_TYPE

from talos.libs.image_utils import get_full_path

from .topic import Problem


class Video(models.Model):
    class Meta:
        db_table = 'api_topic_video'
        app_label = 'talos'

    topic = models.OneToOneField(Problem, default=None, null=True, related_name="video")
    video_url = models.CharField(max_length=128, verbose_name=u'视屏地址')
    video_pic = models.CharField(max_length=128, verbose_name=u'视屏封面')
    persistentId = models.CharField(max_length=128, verbose_name=u'七牛视频处理id')
    persistent_status = models.IntegerField(default=VIDEO_CODE_STATUS.NOSTART, verbose_name=u"七牛状态", db_index=True)
    water_url = models.CharField(max_length=128, verbose_name=u'水印视屏地址')
    persistent_clip_id = models.CharField(max_length=128, verbose_name=u'七牛视频截取处理id')
    persistent_clip_status = models.IntegerField(default=VIDEO_CODE_STATUS.NOSTART, verbose_name=u"七牛截取状态", db_index=True)
    intercept_video_url = models.CharField(max_length=128, verbose_name=u"截取的视频地址", default="")
    webp_url = models.CharField(max_length=128, verbose_name=u'webp图片地址')

    def get_video_info(self):
        if self.video_pic:
            video_pic = get_full_path(self.video_pic, '-w')
        else:
            video_pic = settings.VIDEO_HOST + self.video_url + settings.VIDEO_PIC_URL

        if self.water_url:
            video_url = self.water_url
        else:
            video_url = self.video_url

        if self.persistent_clip_status == VIDEO_CODE_STATUS.SUCCESS:
            video_webp = self.webp_url
        else:
            video_webp = ''

        return {
            'video_url': settings.VIDEO_HOST + video_url,
            'video_pic': video_pic,
            'short_video_url': video_webp
        }

    @classmethod
    def cleaned_video_url(cls, video_url):
        return video_url.replace(settings.VIDEO_HOST, '')


class VideoCover(models.Model):
    class Meta:
        db_table = 'api_video_cover'
        app_label = 'talos'
        index_together = [
            ['video_url'],
        ]

    source_id = models.IntegerField(verbose_name=u'视频来源ID', null=False)
    source_type = models.SmallIntegerField(verbose_name=u'视频来源类型', choices=VIDEO_SOURCE_TYPE)
    video_url = models.CharField(max_length=128, verbose_name=u'视屏地址')
    video_pic = models.CharField(max_length=128, verbose_name=u'视屏封面')
    width = models.IntegerField(verbose_name="图片宽度", default=0)
    height = models.IntegerField(verbose_name="图片高度", default=0)

    persistent_clip_id = models.CharField(max_length=128, verbose_name=u'七牛视频截取处理id', default="")
    persistent_clip_status = models.IntegerField(default=VIDEO_CODE_STATUS.NOSTART, verbose_name=u"七牛截取状态")
    intercept_video_url = models.CharField(max_length=128, verbose_name=u"截取的视频地址", default="")
    webp_url = models.CharField(max_length=128, verbose_name=u'webp图片地址', default="")


class VideoLibrary(models.Model):
    """用于处理问答、专栏的视频打上图标水印。记录原始视频地址及处理之后的数据"""
    class Meta:
        verbose_name = "视频库"
        db_table = 'api_community_video_library'
        app_label = 'talos'

    source_id = models.IntegerField(verbose_name=u"关联id", db_index=True)
    raw_video_url = models.CharField(max_length=128, verbose_name=u"视频地址")
    water_video_url = models.CharField(max_length=128, verbose_name=u"带图片水印的视频地址", default="")
    persistent_id = models.CharField(max_length=128, verbose_name=u'七牛视频处理id', default='')
    persistent_status = models.IntegerField(verbose_name=u"七牛状态", choices=VIDEO_CODE_STATUS, default=VIDEO_CODE_STATUS.NOSTART)
    video_type = models.IntegerField(verbose_name=u"视频类型", choices=VIDEO_SOURCE_TYPE)
    create_time = models.DateTimeField(verbose_name=u'创建时间', default=timezone.now)
    update_time = models.DateTimeField(verbose_name=u'更新时间', auto_now=True)