60 ManagedMedia(
const ManagedMedia &m)
77 DBG <<
"checkAttached(" <<
id <<
") not attached" << std::endl;
95 DBG <<
"checkDesired(" <<
id <<
"): not desired (report by " <<
verifier->info() <<
")" << std::endl;
99 DBG <<
"checkDesired(" <<
id <<
"): desired (report by " <<
verifier->info() <<
")" << std::endl;
101 DBG <<
"checkDesired(" <<
id <<
"): desired (cached)" << std::endl;
112 typedef std::map<MediaAccessId, ManagedMedia> ManagedMediaMap;
123 return std::string(
typeid((*
this)).name());
131 return std::string(
"zypp::media::NoVerifier");
156 ManagedMediaMap::iterator it;
163 if( it->second.handler->dependsOnParent())
168 it->second.handler->resetParentId();
195 inline ManagedMedia &
198 ManagedMediaMap::iterator it(
mediaMap.find(accessId));
214 WAR <<
"Failed to retrieve modification time of '/etc/mtab'" 220 static inline MountEntries
260 tmp.handler->open(
url, preferred_attach_point);
264 m_impl->mediaMap[nextId] = tmp;
266 DBG <<
"Opened new media access using id " << nextId
287 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
288 for( ; m !=
m_impl->mediaMap.end(); ++m)
290 if( m->second.handler->dependsOnParent(accessId,
true))
293 m->second.handler->url().asString()
298 DBG <<
"Close to access handler using id " 299 << accessId <<
" requested" << std::endl;
301 ManagedMedia &ref(
m_impl->findMM(accessId));
302 ref.handler->close();
304 m_impl->mediaMap.erase(accessId);
313 ManagedMediaMap::iterator it(
m_impl->mediaMap.find(accessId));
314 return it !=
m_impl->mediaMap.end() &&
315 it->second.handler->isOpen();
324 ManagedMedia &ref(
m_impl->findMM(accessId));
326 return ref.handler->protocol();
335 ManagedMedia &ref(
m_impl->findMM(accessId));
337 return ref.handler->downloads();
346 ManagedMedia &ref(
m_impl->findMM(accessId));
348 return ref.handler->url();
361 ManagedMedia &ref(
m_impl->findMM(accessId));
366 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier=" 376 ManagedMedia &ref(
m_impl->findMM(accessId));
382 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier=" 400 ManagedMedia &ref(
m_impl->findMM(accessId));
402 DBG <<
"attach(id=" << accessId <<
")" << std::endl;
405 ref.handler->attach(
false);
408 ref.checkDesired(accessId);
415 if (!ref.handler->hasMoreDevices())
418 if (ref.handler->isAttached())
419 ref.handler->release();
422 MIL <<
"checkDesired(" << accessId <<
") of first device failed," 423 " going to try others with attach(true)" << std::endl;
425 while (ref.handler->hasMoreDevices())
430 ref.handler->attach(
true);
431 ref.checkDesired(accessId);
438 if (!ref.handler->hasMoreDevices())
440 MIL <<
"No desired media found after trying all detected devices." << std::endl;
445 DBG <<
"Skipping " << media.mediaSource->asString() <<
": not desired media." << std::endl;
447 ref.handler->release();
453 if (!ref.handler->hasMoreDevices())
457 DBG <<
"Skipping " << media.mediaSource->asString() <<
" because of exception thrown by attach(true)" << std::endl;
459 if (ref.handler->isAttached()) ref.handler->release();
470 ManagedMedia &ref(
m_impl->findMM(accessId));
472 DBG <<
"release(id=" << accessId;
473 if (!ejectDev.empty())
474 DBG <<
", " << ejectDev;
475 DBG <<
")" << std::endl;
477 if(!ejectDev.empty())
485 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
486 for( ; m !=
m_impl->mediaMap.end(); ++m)
488 if( m->second.handler->dependsOnParent(accessId,
false))
492 DBG <<
"Forcing release of handler depending on access id " 493 << accessId << std::endl;
494 m->second.desired =
false;
495 m->second.handler->release();
505 ref.handler->release(ejectDev);
514 MIL <<
"Releasing all attached media" << std::endl;
516 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
517 for( ; m !=
m_impl->mediaMap.end(); ++m)
519 if( m->second.handler->dependsOnParent())
524 if(m->second.handler->isAttached())
526 DBG <<
"Releasing media id " << m->first << std::endl;
527 m->second.desired =
false;
528 m->second.handler->release();
532 DBG <<
"Media id " << m->first <<
" not attached " << std::endl;
538 ERR <<
"Failed to release media id " << m->first << std::endl;
542 MIL <<
"Exit" << std::endl;
551 ManagedMedia &ref(
m_impl->findMM(accessId));
553 ref.handler->disconnect();
562 ManagedMedia &ref(
m_impl->findMM(accessId));
564 return ref.handler->isAttached();
572 ManagedMedia &ref(
m_impl->findMM(accessId));
574 return ref.handler->isSharedMedia();
583 ManagedMedia &ref(
m_impl->findMM(accessId));
585 if( !ref.handler->isAttached())
592 ref.desired = ref.verifier->isDesiredMedia(ref.handler);
599 DBG <<
"isDesiredMedia(" << accessId <<
"): " 600 << (ref.desired ?
"" :
"not ")
601 <<
"desired (report by " 602 << ref.verifier->info() <<
")" << std::endl;
617 ManagedMedia &ref(
m_impl->findMM(accessId));
620 if( ref.handler->isAttached())
623 desired = v->isDesiredMedia(ref.handler);
630 DBG <<
"isDesiredMedia(" << accessId <<
"): " 632 <<
"desired (report by " 633 << v->info() <<
")" << std::endl;
650 ManagedMedia &ref(
m_impl->findMM(accessId));
653 path = ref.handler->localRoot();
664 ManagedMedia &ref(
m_impl->findMM(accessId));
667 path = ref.handler->localPath(pathname);
678 ManagedMedia &ref(
m_impl->findMM(accessId));
680 ref.checkDesired(accessId);
682 ref.handler->provideFile(filename);
692 ManagedMedia &ref(
m_impl->findMM(accessId));
694 ref.checkDesired(accessId);
696 ref.handler->setDeltafile(filename);
706 ManagedMedia &ref(
m_impl->findMM(accessId));
708 ref.checkDesired(accessId);
710 ref.handler->provideDir(dirname);
720 ManagedMedia &ref(
m_impl->findMM(accessId));
722 ref.checkDesired(accessId);
724 ref.handler->provideDirTree(dirname);
734 ManagedMedia &ref(
m_impl->findMM(accessId));
736 ref.checkAttached(accessId);
738 ref.handler->releaseFile(filename);
748 ManagedMedia &ref(
m_impl->findMM(accessId));
750 ref.checkAttached(accessId);
752 ref.handler->releaseDir(dirname);
763 ManagedMedia &ref(
m_impl->findMM(accessId));
765 ref.checkAttached(accessId);
767 ref.handler->releasePath(pathname);
773 std::list<std::string> &retlist,
779 ManagedMedia &ref(
m_impl->findMM(accessId));
782 ref.checkAttached(accessId);
784 ref.handler->dirInfo(retlist, dirname, dots);
796 ManagedMedia &ref(
m_impl->findMM(accessId));
799 ref.checkAttached(accessId);
801 ref.handler->dirInfo(retlist, dirname, dots);
809 ManagedMedia &ref(
m_impl->findMM(accessId));
812 ref.checkAttached(accessId);
814 return ref.handler->doesFileExist(filename);
820 std::vector<std::string> & devices,
821 unsigned int & index)
const 824 ManagedMedia &ref(
m_impl->findMM(accessId));
825 return ref.handler->getDetectedDevices(devices, index);
860 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
861 for( ; m !=
m_impl->mediaMap.end(); ++m)
875 if( mnt.size() > our.size() &&
876 mnt.at(our.size()) ==
'/' &&
877 !mnt.compare(0, our.size(), our))
892 MountEntries entries(
m_impl->getMountEntries());
893 MountEntries::const_iterator e;
894 for( e = entries.begin(); e != entries.end(); ++e)
905 if( mnt.size() > our.size() &&
906 mnt.at(our.size()) ==
'/' &&
907 !mnt.compare(0, our.size(), our))
924 ManagedMedia &ref(
m_impl->findMM(accessId));
926 return ref.handler->attachedMedia();
935 if( !media || media->type.empty())
938 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
939 for( ; m !=
m_impl->mediaMap.end(); ++m)
941 if( !m->second.handler->isAttached())
957 if( !media || media->type.empty())
960 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
961 for( ; m !=
m_impl->mediaMap.end(); ++m)
963 if( !m->second.handler->isAttached())
969 m->second.handler->release();
970 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.
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.