60 ManagedMedia(
const ManagedMedia &m)
77 DBG <<
"checkAttached(" <<
id <<
") not attached" << std::endl;
96 media::MediaNotDesiredException newEx (
handler->url() );
103 DBG <<
"checkDesired(" <<
id <<
"): not desired (report by " <<
verifier->info() <<
")" << std::endl;
107 DBG <<
"checkDesired(" <<
id <<
"): desired (report by " <<
verifier->info() <<
")" << std::endl;
109 DBG <<
"checkDesired(" <<
id <<
"): desired (cached)" << std::endl;
120 typedef std::map<MediaAccessId, ManagedMedia> ManagedMediaMap;
131 return std::string(
typeid((*
this)).name());
139 return std::string(
"zypp::media::NoVerifier");
164 ManagedMediaMap::iterator it;
171 if( it->second.handler->dependsOnParent())
176 it->second.handler->resetParentId();
203 inline ManagedMedia &
206 ManagedMediaMap::iterator it(
mediaMap.find(accessId));
222 WAR <<
"Failed to retrieve modification time of '/etc/mtab'" 228 static inline MountEntries
268 tmp.handler->open(
url, preferred_attach_point);
272 m_impl->mediaMap[nextId] = tmp;
274 DBG <<
"Opened new media access using id " << nextId
295 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
296 for( ; m !=
m_impl->mediaMap.end(); ++m)
298 if( m->second.handler->dependsOnParent(accessId,
true))
301 m->second.handler->url().asString()
306 DBG <<
"Close to access handler using id " 307 << accessId <<
" requested" << std::endl;
309 ManagedMedia &ref(
m_impl->findMM(accessId));
310 ref.handler->close();
312 m_impl->mediaMap.erase(accessId);
321 ManagedMediaMap::iterator it(
m_impl->mediaMap.find(accessId));
322 return it !=
m_impl->mediaMap.end() &&
323 it->second.handler->isOpen();
332 ManagedMedia &ref(
m_impl->findMM(accessId));
334 return ref.handler->protocol();
343 ManagedMedia &ref(
m_impl->findMM(accessId));
345 return ref.handler->downloads();
354 ManagedMedia &ref(
m_impl->findMM(accessId));
356 return ref.handler->url();
369 ManagedMedia &ref(
m_impl->findMM(accessId));
374 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier=" 384 ManagedMedia &ref(
m_impl->findMM(accessId));
390 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier=" 408 ManagedMedia &ref(
m_impl->findMM(accessId));
410 DBG <<
"attach(id=" << accessId <<
")" << std::endl;
413 ref.handler->attach(
false);
416 ref.checkDesired(accessId);
423 if (!ref.handler->hasMoreDevices())
426 if (ref.handler->isAttached())
427 ref.handler->release();
430 MIL <<
"checkDesired(" << accessId <<
") of first device failed," 431 " going to try others with attach(true)" << std::endl;
433 while (ref.handler->hasMoreDevices())
438 ref.handler->attach(
true);
439 ref.checkDesired(accessId);
446 if (!ref.handler->hasMoreDevices())
448 MIL <<
"No desired media found after trying all detected devices." << std::endl;
453 DBG <<
"Skipping " << media.mediaSource->asString() <<
": not desired media." << std::endl;
455 ref.handler->release();
461 if (!ref.handler->hasMoreDevices())
465 DBG <<
"Skipping " << media.mediaSource->asString() <<
" because of exception thrown by attach(true)" << std::endl;
467 if (ref.handler->isAttached()) ref.handler->release();
478 ManagedMedia &ref(
m_impl->findMM(accessId));
480 DBG <<
"release(id=" << accessId;
481 if (!ejectDev.empty())
482 DBG <<
", " << ejectDev;
483 DBG <<
")" << std::endl;
485 if(!ejectDev.empty())
493 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
494 for( ; m !=
m_impl->mediaMap.end(); ++m)
496 if( m->second.handler->dependsOnParent(accessId,
false))
500 DBG <<
"Forcing release of handler depending on access id " 501 << accessId << std::endl;
502 m->second.desired =
false;
503 m->second.handler->release();
513 ref.handler->release(ejectDev);
522 MIL <<
"Releasing all attached media" << std::endl;
524 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
525 for( ; m !=
m_impl->mediaMap.end(); ++m)
527 if( m->second.handler->dependsOnParent())
532 if(m->second.handler->isAttached())
534 DBG <<
"Releasing media id " << m->first << std::endl;
535 m->second.desired =
false;
536 m->second.handler->release();
540 DBG <<
"Media id " << m->first <<
" not attached " << std::endl;
546 ERR <<
"Failed to release media id " << m->first << std::endl;
550 MIL <<
"Exit" << std::endl;
559 ManagedMedia &ref(
m_impl->findMM(accessId));
561 ref.handler->disconnect();
570 ManagedMedia &ref(
m_impl->findMM(accessId));
572 return ref.handler->isAttached();
580 ManagedMedia &ref(
m_impl->findMM(accessId));
582 return ref.handler->isSharedMedia();
591 ManagedMedia &ref(
m_impl->findMM(accessId));
593 if( !ref.handler->isAttached())
600 ref.desired = ref.verifier->isDesiredMedia(ref.handler);
607 DBG <<
"isDesiredMedia(" << accessId <<
"): " 608 << (ref.desired ?
"" :
"not ")
609 <<
"desired (report by " 610 << ref.verifier->info() <<
")" << std::endl;
625 ManagedMedia &ref(
m_impl->findMM(accessId));
628 if( ref.handler->isAttached())
631 desired = v->isDesiredMedia(ref.handler);
638 DBG <<
"isDesiredMedia(" << accessId <<
"): " 640 <<
"desired (report by " 641 << v->info() <<
")" << std::endl;
658 ManagedMedia &ref(
m_impl->findMM(accessId));
661 path = ref.handler->localRoot();
672 ManagedMedia &ref(
m_impl->findMM(accessId));
675 path = ref.handler->localPath(pathname);
682 const ByteCount &expectedFileSize )
const 686 ManagedMedia &ref(
m_impl->findMM(accessId));
688 ref.checkDesired(accessId);
690 ref.handler->provideFile(filename, expectedFileSize);
708 ManagedMedia &ref(
m_impl->findMM(accessId));
710 ref.checkDesired(accessId);
712 ref.handler->setDeltafile(filename);
722 ManagedMedia &ref(
m_impl->findMM(accessId));
724 ref.checkDesired(accessId);
726 ref.handler->provideDir(dirname);
736 ManagedMedia &ref(
m_impl->findMM(accessId));
738 ref.checkDesired(accessId);
740 ref.handler->provideDirTree(dirname);
750 ManagedMedia &ref(
m_impl->findMM(accessId));
752 ref.checkAttached(accessId);
754 ref.handler->releaseFile(filename);
764 ManagedMedia &ref(
m_impl->findMM(accessId));
766 ref.checkAttached(accessId);
768 ref.handler->releaseDir(dirname);
779 ManagedMedia &ref(
m_impl->findMM(accessId));
781 ref.checkAttached(accessId);
783 ref.handler->releasePath(pathname);
789 std::list<std::string> &retlist,
795 ManagedMedia &ref(
m_impl->findMM(accessId));
798 ref.checkAttached(accessId);
800 ref.handler->dirInfo(retlist, dirname, dots);
812 ManagedMedia &ref(
m_impl->findMM(accessId));
815 ref.checkAttached(accessId);
817 ref.handler->dirInfo(retlist, dirname, dots);
825 ManagedMedia &ref(
m_impl->findMM(accessId));
828 ref.checkAttached(accessId);
830 return ref.handler->doesFileExist(filename);
836 std::vector<std::string> & devices,
837 unsigned int & index)
const 840 ManagedMedia &ref(
m_impl->findMM(accessId));
841 return ref.handler->getDetectedDevices(devices, index);
876 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
877 for( ; m !=
m_impl->mediaMap.end(); ++m)
891 if( mnt.size() > our.size() &&
892 mnt.at(our.size()) ==
'/' &&
893 !mnt.compare(0, our.size(), our))
908 MountEntries entries(
m_impl->getMountEntries());
909 MountEntries::const_iterator e;
910 for( e = entries.begin(); e != entries.end(); ++e)
921 if( mnt.size() > our.size() &&
922 mnt.at(our.size()) ==
'/' &&
923 !mnt.compare(0, our.size(), our))
940 ManagedMedia &ref(
m_impl->findMM(accessId));
942 return ref.handler->attachedMedia();
951 if( !media || media->type.empty())
954 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
955 for( ; m !=
m_impl->mediaMap.end(); ++m)
957 if( !m->second.handler->isAttached())
973 if( !media || media->type.empty())
976 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
977 for( ; m !=
m_impl->mediaMap.end(); ++m)
979 if( !m->second.handler->isAttached())
985 m->second.handler->release();
986 m->second.desired =
false;
std::string getScheme() const
Returns the scheme name of the URL.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Store and operate with byte count.
bool empty() const
Test for an empty path.
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
std::string asString() const
Returns a default string representation of the Url object.
const std::string & asString() const
String representation.
std::list< DirEntry > DirContent
Returned by readdir.
std::string numstring(char n, int w=0)
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
Base class for Exception.
Wrapper for const correct access via Smart pointer types.
Wrapper class for ::stat/::lstat.
Easy-to use interface to the ZYPP dependency resolver.