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