示例#1
0
 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() );
};