Container::Ptr OpenAYL(Item::DataProvider::Ptr provider, const QString& filename, Log::ProgressCallback& cb) { const QFileInfo info(filename); if (!info.isFile() || !info.isReadable() || !CheckAYLByName(info.fileName())) { return Container::Ptr(); } QFile device(filename); if (!device.open(QIODevice::ReadOnly | QIODevice::Text)) { assert(!"Failed to open playlist"); return Container::Ptr(); } QTextStream stream(&device); const String header = FromQString(stream.readLine(0).simplified()); const int vers = CheckAYLBySignature(header); if (vers < 0) { return Container::Ptr(); } Dbg("Processing AYL version %1%", vers); const VersionLayer version(vers); LinesSource lines(stream, version); const AYLContainer aylItems(lines, cb); const QString basePath = info.absolutePath(); const ContainerItems::Ptr items = CreateItems(basePath, version, aylItems); const Parameters::Container::Ptr properties = CreateProperties(version, aylItems); properties->SetValue(Playlist::ATTRIBUTE_NAME, FromQString(info.baseName())); return Playlist::IO::CreateContainer(provider, properties, items); }
void NBMediaInfoModel::setupModel() { MediaInfo MI; MI.Open( FromQString( mFileName ) ); QStringList keys; for( int s = (int)Stream_General; s < (int)Stream_Max; s++ ) { size_t streamNumMax = MI.Count_Get( (stream_t)s ); if ( not streamNumMax ) continue; for( size_t j = 0; j < streamNumMax; j++ ) { QString streamKindName = FromZString( MI.Get( (stream_t)s, j, ZString( "StreamKind/String" ), Info_Text ) ); if ( streamNumMax > 1 ) streamKindName += QString( " %1" ).arg( j ); size_t infoCount = MI.Count_Get( (stream_t)s, j ); if ( not infoCount ) continue; NBMediaInfoNode *streamNode = new NBMediaInfoNode( streamKindName, QString(), rootNode ); keys.clear(); for( size_t i = 0; i < infoCount; i++ ) { QString name = FromZString( MI.Get( (stream_t)s, j, i, Info_Name_Text ) ); QString value = FromZString( MI.Get( (stream_t)s, j, i, Info_Text ) ); if ( name.contains( "Count", Qt::CaseInsensitive ) ) continue; else if ( name.contains( "name", Qt::CaseInsensitive ) and not name.contains( "track", Qt::CaseInsensitive ) ) continue; else if ( name.startsWith( "Kind of", Qt::CaseInsensitive ) ) continue; else if ( name == "File size" ) continue; else if ( name.contains( "last modification", Qt::CaseInsensitive ) ) continue; else if ( name.contains( "Extensions usually", Qt::CaseInsensitive ) ) continue; if ( value.size() ) value += FromZString( MI.Get( (stream_t)s, 0, i, Info_Measure_Text ) ); if ( not name.size() or not value.size() ) continue; if ( not keys.contains( name ) ) { keys << name; streamNode->addChild( new NBMediaInfoNode( name, value, streamNode ) ); } } rootNode->addChild( streamNode ); } } mQuickInfo = FromZString( MI.Inform() ); };