Ejemplo n.º 1
0
    def add_mediasource(self, data):
        mediasource = MediaSource(name=data['name'], user_id=data['user_id'], module_id=data['module_id'])
        db.session.add(mediasource)
        db.session.commit()
        data['media_source_id'] = mediasource.id
        module_class = mediasources.__dict__[mediasource.module.name].get_module_class()
        module = module_class(data)
        db.session.add(module)
        db.session.commit()
        medias_model = []
        medias = module.get_all_medias()
        for media in medias:
            content_type = db.session.query(ContentType).filter(ContentType.name == media['content_type']).first()
            if content_type:
                content_type_id = content_type.id
                content_type = '_'.join(content_type.name.split('/'))
                content_type = content_types.__dict__[content_type]
                media_url = module.get_media_url(media['url'])
                thread = Thread(target=self._get_media_dict, args=(content_type, media_url,))
                self._threads.append(thread)
                thread.start()

        for thread in self._threads:
            thread.join()

        for media_dict in self._medias_dict:
            artist = Artist.query.filter(Artist.name == media_dict['artist']).first()
            if not artist:
                artist = Artist(name=media_dict['artist'])
                db.session.add(artist)
                db.session.commit()
            media_model = Media(name=media_dict['name'], content_type_id=content_type_id,
                                url=media_dict['url'], source_id=mediasource.id, artist=artist)
            media_model.genre = media_dict['genre']
            if media_dict.has_key('date'):
                media_model.date = media_dict['date']
            if media_dict.has_key('collection'):
                media_model.collection = media_dict['collection']
            if media_dict.has_key('collection_position'):
                media_model.coll_pos = media_dict['collection_position']
            db.session.add(media_model)
            medias_model.append(media_model)
        db.session.commit()

        for media in medias_model:
            for genre in media.genre:
                genre_id = db.session.query(Genre.id).filter(Genre.name == genre).first()
                if genre_id:
                    db.session.add(MediaGenre(genre_id=genre_id[0], media_id=media.id))
                else:
                    genre_ = Genre(name=genre)
                    db.session.add(genre_)
                    db.session.commit()
                    db.session.add(MediaGenre(genre_id=genre_.id, media_id=media.id))

            if hasattr(media, 'collection'):
                playlist_id = db.session.query(Playlist.id).filter(Playlist.collection == True, Playlist.name == media.collection).first()
                if playlist_id:
                    db.session.add(MediaPlaylist(playlist_id=playlist_id[0], media_id=media.id))
                else:
                    playlist = Playlist(name=media.collection, collection=True)
                    db.session.add(playlist)
                    db.session.commit()
                    db.session.add(MediaPlaylist(playlist_id=playlist.id, media_id=media.id))
        db.session.commit()
        return True