TEST_F( Folders, NbMedia ) { enforceFakeMediaTypes( ml.get() ); auto root = ml->folder( 1 ); auto subFolder = ml->folder( 2 ); ASSERT_EQ( "file:///a/", root->mrl() ); ASSERT_EQ( "file:///a/folder/", subFolder->mrl() ); ASSERT_EQ( 2u, root->media( IMedia::Type::Unknown, nullptr )->count() ); ASSERT_EQ( 1u, subFolder->media( IMedia::Type::Unknown, nullptr )->count() ); // Do not watch for live changes ml.reset(); fsMock->removeFile( mock::FileSystemFactory::SubFolder + "subfile.mp4" ); Reload(); root = ml->folder( 1 ); subFolder = ml->folder( 2 ); ASSERT_EQ( 2u, root->media( IMedia::Type::Unknown, nullptr )->count() ); ASSERT_EQ( 1u, root->media( IMedia::Type::Video, nullptr )->count() ); ASSERT_EQ( 1u, root->media( IMedia::Type::Audio, nullptr )->count() ); ASSERT_EQ( 0u, subFolder->media( IMedia::Type::Unknown, nullptr )->count() ); auto videoMedia = root->media( IMedia::Type::Video, nullptr )->all(); ASSERT_EQ( 1u, videoMedia.size() ); auto media = std::static_pointer_cast<Media>( videoMedia[0] ); media->setType( IMedia::Type::Audio ); media->save(); videoMedia = root->media( IMedia::Type::Video, nullptr )->all(); ASSERT_EQ( 0u, videoMedia.size() ); ASSERT_EQ( 0u, root->media( IMedia::Type::Video, nullptr )->count() ); auto audioMedia = root->media( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 2u, audioMedia.size() ); ASSERT_EQ( 2u, root->media( IMedia::Type::Audio, nullptr )->count() ); media->setType( IMedia::Type::Video ); media->save(); videoMedia = root->media( IMedia::Type::Video, nullptr )->all(); ASSERT_EQ( 1u, videoMedia.size() ); ASSERT_EQ( 1u, root->media( IMedia::Type::Video, nullptr )->count() ); audioMedia = root->media( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 1u, audioMedia.size() ); ASSERT_EQ( 1u, root->media( IMedia::Type::Audio, nullptr )->count() ); }
TEST_F( Folders, ListFolders ) { auto f = std::static_pointer_cast<Folder>( ml->folder( mock::FileSystemFactory::Root ) ); ASSERT_NE( f, nullptr ); auto subFolders = f->folders(); ASSERT_EQ( 1u, subFolders.size() ); auto subFolder = subFolders[0]; auto subFiles = subFolder->files(); ASSERT_EQ( 1u, subFiles.size() ); ASSERT_EQ( mock::FileSystemFactory::SubFolder + "subfile.mp4", subFiles[0]->mrl() ); // Now again, without cache. No need to wait for fs discovery reload here Reload(); f = std::static_pointer_cast<Folder>( ml->folder( f->mrl() ) ); subFolders = f->folders(); ASSERT_EQ( 1u, subFolders.size() ); subFolder = subFolders[0]; subFiles = subFolder->files(); ASSERT_EQ( 1u, subFiles.size() ); ASSERT_EQ( mock::FileSystemFactory::SubFolder + "subfile.mp4", subFiles[0]->mrl() ); }
QString MpInterface::getLocalFile() { QString ret = mrl(); if(ret.isEmpty())return ret; if(ret.startsWith("file://",Qt::CaseInsensitive)) { ret.remove(0,7); return ret; } return QString(); }
Mrl Mrl::fromDisc(const QString &scheme, const QString &device, int title, bool hash) { QString loc = scheme % _L("://"); if (title < 0) loc += _L("menu"); else if (title >= 0) loc += QString::number(title); Mrl mrl(loc % _L('/') % device); if (hash) mrl.updateHash(); return mrl; }
TEST_F( Folders, List ) { auto f = std::static_pointer_cast<Folder>( ml->folder( mock::FileSystemFactory::Root ) ); ASSERT_NE( f, nullptr ); auto files = f->files(); ASSERT_EQ( files.size(), 2u ); Reload(); f = std::static_pointer_cast<Folder>( ml->folder( f->mrl() ) ); files = f->files(); ASSERT_EQ( files.size(), 2u ); }
TEST_F( FoldersNoDiscover, Name ) { auto newFolder = mock::FileSystemFactory::SubFolder + "folder%20with%20spaces/"; fsMock->addFolder( newFolder ); ml->discover( mock::FileSystemFactory::Root ); bool discovered = cbMock->waitDiscovery(); ASSERT_TRUE( discovered ); auto root = ml->folder( 1 ); auto subFolder = ml->folder( 2 ); auto spacesFolder = ml->folder( 3 ); ASSERT_EQ( "a", root->name() ); ASSERT_EQ( "folder", subFolder->name() ); ASSERT_EQ( "folder with spaces", spacesFolder->name() ); ASSERT_EQ( newFolder, spacesFolder->mrl() ); }
TEST_F( Folders, NbMediaDeletionTrigger ) { enforceFakeMediaTypes( ml.get() ); auto root = ml->folder( 1 ); ASSERT_EQ( "file:///a/", root->mrl() ); ASSERT_EQ( 2u, root->media( IMedia::Type::Unknown, nullptr )->count() ); ASSERT_EQ( 1u, ml->folders( IMedia::Type::Audio, nullptr )->count() ); auto folders = ml->folders( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 1u, folders.size() ); auto media = root->media( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 1u, media.size() ); ml->deleteMedia( media[0]->id() ); media = root->media( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 0u, media.size() ); ASSERT_EQ( 0u, ml->folders( IMedia::Type::Audio, nullptr )->count() ); folders = ml->folders( IMedia::Type::Audio, nullptr )->all(); ASSERT_EQ( 0u, folders.size() ); }
std::shared_ptr<IDevice> CommonDirectory::device() const { if ( m_device == nullptr ) m_device = m_fsFactory.createDeviceFromMrl( mrl() ); return m_device; }