Пример #1
0
    def media_resources(self):
        PREFIX = 'jr://file/'
        # you have to call remove_unused_mappings
        # before iterating through multimedia_map
        self.app.remove_unused_mappings()
        if self.app.multimedia_map is None:
            self.app.multimedia_map = {}
        filter_multimedia = self.app.media_language_map and self.build_profile
        if filter_multimedia:
            media_list = []
            for lang in self.build_profile.langs:
                media_list += self.app.media_language_map[lang].media_refs
            requested_media = set(media_list)
        for path, m in sorted(list(self.app.multimedia_map.items()),
                              key=lambda item: item[0]):
            if filter_multimedia and m.form_media and path not in requested_media:
                continue
            unchanged_path = path
            if path.startswith(PREFIX):
                path = path[len(PREFIX):]
            else:
                raise MediaResourceError('%s does not start with %s' %
                                         (path, PREFIX))
            path, name = split_path(path)
            # CommCare assumes jr://media/,
            # which is an alias to jr://file/commcare/media/
            # so we need to replace 'jr://file/' with '../../'
            # (this is a hack)
            install_path = '../../{}'.format(path)
            local_path = './{}/{}'.format(path, name)

            if not getattr(m, 'unique_id', None):
                # lazy migration for adding unique_id to map_item
                m.unique_id = HQMediaMapItem.gen_unique_id(
                    m.multimedia_id, unchanged_path)

            descriptor = None
            if self.app.build_version and self.app.build_version >= LooseVersion(
                    '2.9'):
                type_mapping = {
                    "CommCareImage": "Image",
                    "CommCareAudio": "Audio",
                    "CommCareVideo": "Video",
                    "CommCareMultimedia": "Text"
                }
                descriptor = "{filetype} File: {name}".format(
                    filetype=type_mapping.get(m.media_type, "Media"),
                    name=name)

            yield MediaResource(
                id=id_strings.media_resource(m.unique_id, name),
                path=install_path,
                version=m.version,
                descriptor=descriptor,
                local=(local_path if self.app.enable_local_resource else None),
                remote=self.app.url_base + reverse(
                    'hqmedia_download', args=[m.media_type, m.multimedia_id]) +
                six.moves.urllib.parse.quote(name.encode('utf-8'))
                if name else name)
Пример #2
0
    def media_resources(self):
        PREFIX = 'jr://file/'
        multimedia_map = self.app.multimedia_map_for_build(
            build_profile=self.build_profile, remove_unused=True)
        lazy_load_preference = self.app.profile.get(
            'properties', {}).get('lazy-load-video-files')
        for path, m in sorted(list(multimedia_map.items()),
                              key=lambda item: item[0]):
            unchanged_path = path
            if path.startswith(PREFIX):
                path = path[len(PREFIX):]
            else:
                raise MediaResourceError('%s does not start with %s' %
                                         (path, PREFIX))
            path, name = split_path(path)
            # CommCare assumes jr://media/,
            # which is an alias to jr://file/commcare/media/
            # so we need to replace 'jr://file/' with '../../'
            # (this is a hack)
            install_path = '../../{}'.format(path)
            local_path = './{}/{}'.format(path, name)

            load_lazily = (lazy_load_preference == 'true'
                           and m.media_type == "CommCareVideo")
            if not getattr(m, 'unique_id', None):
                # lazy migration for adding unique_id to map_item
                m.unique_id = HQMediaMapItem.gen_unique_id(
                    m.multimedia_id, unchanged_path)

            descriptor = None
            if self.app.build_version and self.app.build_version >= LooseVersion(
                    '2.9'):
                type_mapping = {
                    "CommCareImage": "Image",
                    "CommCareAudio": "Audio",
                    "CommCareVideo": "Video",
                    "CommCareMultimedia": "Text"
                }
                descriptor = "{filetype} File: {name}".format(
                    filetype=type_mapping.get(m.media_type, "Media"),
                    name=name)

            yield MediaResource(
                id=id_strings.media_resource(m.unique_id, name),
                path=install_path,
                version=m.version,
                descriptor=descriptor,
                lazy=load_lazily,
                local=(local_path if self.app.enable_local_resource else None),
                remote=self.app.url_base + reverse(
                    'hqmedia_download', args=[m.media_type, m.multimedia_id]) +
                six.moves.urllib.parse.quote(name.encode('utf-8'))
                if name else name)