bool Video::RemoveVideoFromDB( int Id ) { bool bResult = false; VideoMetadataListManager::metadata_list videolist; VideoMetadataListManager::loadAllFromDatabase(videolist); VideoMetadataListManager *mlm = new VideoMetadataListManager(); mlm->setList(videolist); VideoMetadataListManager::VideoMetadataPtr metadata = mlm->byID(Id); if (metadata) bResult = metadata->DeleteFromDatabase(); delete mlm; return bResult; }
DTC::VideoMetadataInfo* Video::GetVideoByFilename( const QString &Filename ) { VideoMetadataListManager::metadata_list videolist; VideoMetadataListManager::loadAllFromDatabase(videolist); VideoMetadataListManager *mlm = new VideoMetadataListManager(); mlm->setList(videolist); VideoMetadataListManager::VideoMetadataPtr metadata = mlm->byFilename(Filename); if ( !metadata ) throw( QString( "No metadata found for selected filename!." )); DTC::VideoMetadataInfo *pVideoMetadataInfo = GetInfoFromMetadata(metadata); delete mlm; return pVideoMetadataInfo; }
void VideoListImp::buildTVList(void) { metadata_list ml; VideoMetadataListManager::loadAllFromDatabase(ml); m_metadata.setList(ml); metadata_view_list mlist; mlist.reserve(m_metadata.getList().size()); back_insert_iterator<metadata_view_list> mli(mlist); transform(m_metadata.getList().begin(), m_metadata.getList().end(), mli, to_metadata_ptr()); metadata_path_sort mps(true); sort(mlist.begin(), mlist.end(), mps); typedef map<QString, meta_dir_node *> group_to_node_map; group_to_node_map gtnm; meta_dir_node *video_root = &m_metadata_tree; smart_dir_node sdn = video_root->addSubDir(QObject::tr("Television")); meta_dir_node* television_node = sdn.get(); smart_dir_node vdn = video_root->addSubDir(QObject::tr("Movies")); meta_dir_node* movie_node = vdn.get(); for (metadata_view_list::iterator p = mlist.begin(); p != mlist.end(); ++p) { VideoMetadata *data = *p; if (((*p)->GetSeason() > 0) || ((*p)->GetEpisode() > 0)) { smart_dir_node sdn = television_node->addSubDir((*p)->GetTitle()); meta_dir_node* title_node = sdn.get(); smart_dir_node ssdn = title_node->addSubDir( QObject::tr("Season %1").arg((*p)->GetSeason())); meta_dir_node* season_node = ssdn.get(); season_node->addEntry(smart_meta_node(new meta_data_node(data))); } else movie_node->addEntry(smart_meta_node(new meta_data_node(data))); } }
void VideoListImp::buildDbList() { metadata_list ml; VideoMetadataListManager::loadAllFromDatabase(ml); m_metadata.setList(ml); metadata_view_list mlist; mlist.reserve(m_metadata.getList().size()); back_insert_iterator<metadata_view_list> mli(mlist); transform(m_metadata.getList().begin(), m_metadata.getList().end(), mli, to_metadata_ptr()); // print_meta_list(mlist); metadata_path_sort mps(true); sort(mlist.begin(), mlist.end(), mps); // TODO: break out the prefix in the DB so this isn't needed typedef map<QString, meta_dir_node *> prefix_to_node_map; prefix_to_node_map ptnm; QStringList dirs = GetVideoDirs(); if (dirs.isEmpty()) return; QString test_prefix(dirs[0]); meta_dir_node *video_root = &m_metadata_tree; if (dirs.size() == 1) { video_root->setPathRoot(); video_root->setPath(test_prefix); video_root->setName("videos"); ptnm.insert(prefix_to_node_map::value_type(test_prefix, video_root)); } for (metadata_view_list::iterator p = mlist.begin(); p != mlist.end(); ++p) { AddMetadataToDir(*p, video_root); } // print_dir_tree(m_metadata_tree); // AEW DEBUG }
bool VideoMetadata::fillDataFromID(const VideoMetadataListManager &cache) { if (m_imp->getID() == 0) return false; VideoMetadataListManager::VideoMetadataPtr mp = cache.byID(m_imp->getID()); if (mp.get()) { *this = *mp; return true; } return false; }
bool VideoMetadata::FillDataFromFilename(const VideoMetadataListManager &cache) { if (m_imp->getFilename().isEmpty()) return false; VideoMetadataListManager::VideoMetadataPtr mp = cache.byFilename(m_imp->getFilename()); if (mp) { *this = *mp; return true; } return false; }
void VideoListImp::fillMetadata(metadata_list_type whence) { if (m_metadata_list_type != whence) { m_metadata_list_type = whence; // flush existing data metadata_list ml; m_metadata.setList(ml); m_metadata_tree.clear(); switch (whence) { case ltFileSystem: buildFsysList(); break; case ltDBMetadata: buildDbList(); break; case ltTVMetadata: buildTVList(); break; case ltDBGenreGroup: case ltDBCategoryGroup: case ltDBYearGroup: case ltDBDirectorGroup: case ltDBStudioGroup: case ltDBCastGroup: case ltDBUserRatingGroup: case ltDBInsertDateGroup: buildGroupList(whence); break; case ltNone: break; } } }
void VideoListImp::buildGroupList(metadata_list_type whence) { metadata_list ml; VideoMetadataListManager::loadAllFromDatabase(ml); m_metadata.setList(ml); metadata_view_list mlist; mlist.reserve(m_metadata.getList().size()); back_insert_iterator<metadata_view_list> mli(mlist); transform(m_metadata.getList().begin(), m_metadata.getList().end(), mli, to_metadata_ptr()); metadata_path_sort mps(true); sort(mlist.begin(), mlist.end(), mps); typedef map<QString, meta_dir_node *> group_to_node_map; group_to_node_map gtnm; meta_dir_node *video_root = &m_metadata_tree; smart_dir_node sdn = video_root->addSubDir("All"); meta_dir_node* all_group_node = sdn.get(); for (metadata_view_list::iterator p = mlist.begin(); p != mlist.end(); ++p) { VideoMetadata *data = *p; all_group_node->addEntry(smart_meta_node(new meta_data_node(data))); vector<QString> groups; switch (whence) { case ltDBGenreGroup: { vector<pair <int, QString> > genres = data->GetGenres(); for (vector<pair <int, QString> >::iterator i = genres.begin(); i != genres.end(); ++i) { pair<int, QString> item = *i; groups.push_back(item.second); } break; } case ltDBCategoryGroup: { groups.push_back(data->GetCategory()); break; } case ltDBYearGroup: { groups.push_back(QString::number(data->GetYear())); break; } case ltDBDirectorGroup: { groups.push_back(data->GetDirector()); break; } case ltDBStudioGroup: { groups.push_back(data->GetStudio()); break; } case ltDBCastGroup: { vector<pair<int, QString> > cast = data->GetCast(); for (vector<pair<int, QString> >::iterator i = cast.begin(); i != cast.end(); ++i) { pair<int, QString> item = *i; groups.push_back(item.second); } break; } case ltDBUserRatingGroup: { int i = data->GetUserRating(); groups.push_back(QString::number(i)); break; } case ltDBInsertDateGroup: { QDate date = data->GetInsertdate(); QString tmp = MythDate::toString( date, MythDate::kDateFull | MythDate::kSimplify); groups.push_back(tmp); break; } default: { LOG(VB_GENERAL, LOG_ERR, "Invalid type of grouping"); break; } } if (groups.empty()) { meta_dir_node *group_node = gtnm["Unknown"]; if (group_node == NULL) { smart_dir_node sdn = video_root->addSubDir("Unknown"); group_node = sdn.get(); gtnm["Unknown"] = group_node; } group_node->addEntry(smart_meta_node(new meta_data_node(data))); } for (vector<QString>::iterator i = groups.begin(); i != groups.end(); ++i) { QString item = *i; meta_dir_node *group_node = gtnm[item]; if (group_node == NULL) { smart_dir_node sdn = video_root->addSubDir(item); group_node = sdn.get(); gtnm[item] = group_node; } group_node->addEntry(smart_meta_node(new meta_data_node(data))); } } }