60 ManagedMedia(
const ManagedMedia &m)
77 DBG <<
"checkAttached(" <<
id <<
") not attached" << std::endl;
102 DBG <<
"checkDesired(" <<
id <<
"): not desired (report by "
103 <<
verifier->info() <<
")" << std::endl;
109 DBG <<
"checkDesired(" <<
id <<
"): desired (report by "
110 <<
verifier->info() <<
")" << std::endl;
112 DBG <<
"checkDesired(" <<
id <<
"): desired (cached)" << std::endl;
123 typedef std::map<MediaAccessId, ManagedMedia> ManagedMediaMap;
134 return std::string(
typeid((*
this)).name());
142 return std::string(
"zypp::media::NoVerifier");
167 ManagedMediaMap::iterator it;
174 if( it->second.handler->dependsOnParent())
179 it->second.handler->resetParentId();
206 inline ManagedMedia &
209 ManagedMediaMap::iterator it(
mediaMap.find(accessId));
222 time_t mtime = zypp::PathInfo(
"/etc/mtab").mtime();
225 WAR <<
"Failed to retrieve modification time of '/etc/mtab'"
231 static inline MountEntries
269 ManagedMedia tmp( handler, verifier);
271 tmp.handler->open(url, preferred_attach_point);
275 m_impl->mediaMap[nextId] = tmp;
277 DBG <<
"Opened new media access using id " << nextId
278 <<
" to " << url.
asString() << std::endl;
298 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
299 for( ; m !=
m_impl->mediaMap.end(); ++m)
301 if( m->second.handler->dependsOnParent(accessId,
true))
304 m->second.handler->url().asString()
309 DBG <<
"Close to access handler using id "
310 << accessId <<
" requested" << std::endl;
312 ManagedMedia &ref(
m_impl->findMM(accessId));
313 ref.handler->close();
315 m_impl->mediaMap.erase(accessId);
324 ManagedMediaMap::iterator it(
m_impl->mediaMap.find(accessId));
325 return it !=
m_impl->mediaMap.end() &&
326 it->second.handler->isOpen();
335 ManagedMedia &ref(
m_impl->findMM(accessId));
337 return ref.handler->protocol();
346 ManagedMedia &ref(
m_impl->findMM(accessId));
348 return ref.handler->downloads();
357 ManagedMedia &ref(
m_impl->findMM(accessId));
359 return ref.handler->url();
372 ManagedMedia &ref(
m_impl->findMM(accessId));
377 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier="
378 << verifier->info() << std::endl;
387 ManagedMedia &ref(
m_impl->findMM(accessId));
391 ref.verifier.swap(verifier);
393 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier="
394 << verifier->info() << std::endl;
411 ManagedMedia &ref(
m_impl->findMM(accessId));
413 DBG <<
"attach(id=" << accessId <<
")" << std::endl;
416 ref.handler->attach(
false);
419 ref.checkDesired(accessId);
426 if (!ref.handler->hasMoreDevices())
429 if (ref.handler->isAttached())
430 ref.handler->release();
433 MIL <<
"checkDesired(" << accessId <<
") of first device failed,"
434 " going to try others with attach(true)" << std::endl;
436 while (ref.handler->hasMoreDevices())
441 ref.handler->attach(
true);
442 ref.checkDesired(accessId);
449 if (!ref.handler->hasMoreDevices())
451 MIL <<
"No desired media found after trying all detected devices." << std::endl;
456 DBG <<
"Skipping " << media.mediaSource->asString() <<
": not desired media." << std::endl;
458 ref.handler->release();
464 if (!ref.handler->hasMoreDevices())
468 DBG <<
"Skipping " << media.mediaSource->asString() <<
" because of exception thrown by attach(true)" << std::endl;
470 if (ref.handler->isAttached()) ref.handler->release();
481 ManagedMedia &ref(
m_impl->findMM(accessId));
483 DBG <<
"release(id=" << accessId;
484 if (!ejectDev.empty())
485 DBG <<
", " << ejectDev;
486 DBG <<
")" << std::endl;
488 if(!ejectDev.empty())
496 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
497 for( ; m !=
m_impl->mediaMap.end(); ++m)
499 if( m->second.handler->dependsOnParent(accessId,
false))
503 DBG <<
"Forcing release of handler depending on access id "
504 << accessId << std::endl;
505 m->second.desired =
false;
506 m->second.handler->release();
516 ref.handler->release(ejectDev);
525 MIL <<
"Releasing all attached media" << std::endl;
527 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
528 for( ; m !=
m_impl->mediaMap.end(); ++m)
530 if( m->second.handler->dependsOnParent())
535 if(m->second.handler->isAttached())
537 DBG <<
"Releasing media id " << m->first << std::endl;
538 m->second.desired =
false;
539 m->second.handler->release();
543 DBG <<
"Media id " << m->first <<
" not attached " << std::endl;
549 ERR <<
"Failed to release media id " << m->first << std::endl;
553 MIL <<
"Exit" << std::endl;
562 ManagedMedia &ref(
m_impl->findMM(accessId));
564 ref.handler->disconnect();
573 ManagedMedia &ref(
m_impl->findMM(accessId));
575 return ref.handler->isAttached();
583 ManagedMedia &ref(
m_impl->findMM(accessId));
585 return ref.handler->isSharedMedia();
594 ManagedMedia &ref(
m_impl->findMM(accessId));
596 if( !ref.handler->isAttached())
603 ref.desired = ref.verifier->isDesiredMedia(ref.handler);
610 DBG <<
"isDesiredMedia(" << accessId <<
"): "
611 << (ref.desired ?
"" :
"not ")
612 <<
"desired (report by "
613 << ref.verifier->info() <<
")" << std::endl;
628 ManagedMedia &ref(
m_impl->findMM(accessId));
631 if( ref.handler->isAttached())
634 desired = v->isDesiredMedia(ref.handler);
641 DBG <<
"isDesiredMedia(" << accessId <<
"): "
642 << (desired ?
"" :
"not ")
643 <<
"desired (report by "
644 << v->info() <<
")" << std::endl;
661 ManagedMedia &ref(
m_impl->findMM(accessId));
664 path = ref.handler->localRoot();
671 const Pathname & pathname)
const
675 ManagedMedia &ref(
m_impl->findMM(accessId));
678 path = ref.handler->localPath(pathname);
684 const Pathname &filename,
685 const ByteCount &expectedFileSize )
const
689 ManagedMedia &ref(
m_impl->findMM(accessId));
691 ref.checkDesired(accessId);
693 ref.handler->provideFile(filename, expectedFileSize);
699 const Pathname &filename )
const
707 const Pathname &filename )
const
711 ManagedMedia &ref(
m_impl->findMM(accessId));
713 ref.checkDesired(accessId);
715 ref.handler->setDeltafile(filename);
721 const Pathname &dirname)
const
725 ManagedMedia &ref(
m_impl->findMM(accessId));
727 ref.checkDesired(accessId);
729 ref.handler->provideDir(dirname);
735 const Pathname &dirname)
const
739 ManagedMedia &ref(
m_impl->findMM(accessId));
741 ref.checkDesired(accessId);
743 ref.handler->provideDirTree(dirname);
749 const Pathname &filename)
const
753 ManagedMedia &ref(
m_impl->findMM(accessId));
755 ref.checkAttached(accessId);
757 ref.handler->releaseFile(filename);
763 const Pathname &dirname)
const
767 ManagedMedia &ref(
m_impl->findMM(accessId));
769 ref.checkAttached(accessId);
771 ref.handler->releaseDir(dirname);
778 const Pathname &pathname)
const
782 ManagedMedia &ref(
m_impl->findMM(accessId));
784 ref.checkAttached(accessId);
786 ref.handler->releasePath(pathname);
792 std::list<std::string> &retlist,
793 const Pathname &dirname,
798 ManagedMedia &ref(
m_impl->findMM(accessId));
801 ref.checkAttached(accessId);
803 ref.handler->dirInfo(retlist, dirname, dots);
810 const Pathname &dirname,
815 ManagedMedia &ref(
m_impl->findMM(accessId));
818 ref.checkAttached(accessId);
820 ref.handler->dirInfo(retlist, dirname, dots);
828 ManagedMedia &ref(
m_impl->findMM(accessId));
831 ref.checkAttached(accessId);
833 return ref.handler->doesFileExist(filename);
839 std::vector<std::string> & devices,
840 unsigned int & index)
const
843 ManagedMedia &ref(
m_impl->findMM(accessId));
844 return ref.handler->getDetectedDevices(devices, index);
871 if( path.empty() || path ==
"/" || !PathInfo(path).isDir())
879 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
880 for( ; m !=
m_impl->mediaMap.end(); ++m)
886 std::string our(path.asString());
894 if( mnt.size() > our.size() &&
895 mnt.at(our.size()) ==
'/' &&
896 !mnt.compare(0, our.size(), our))
911 MountEntries entries(
m_impl->getMountEntries());
912 MountEntries::const_iterator e;
913 for( e = entries.begin(); e != entries.end(); ++e)
915 std::string mnt(Pathname(e->dir).asString());
916 std::string our(path.asString());
924 if( mnt.size() > our.size() &&
925 mnt.at(our.size()) ==
'/' &&
926 !mnt.compare(0, our.size(), our))
943 ManagedMedia &ref(
m_impl->findMM(accessId));
945 return ref.handler->attachedMedia();
954 if( !media || media->type.empty())
957 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
958 for( ; m !=
m_impl->mediaMap.end(); ++m)
960 if( !m->second.handler->isAttached())
976 if( !media || media->type.empty())
979 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
980 for( ; m !=
m_impl->mediaMap.end(); ++m)
982 if( !m->second.handler->isAttached())
988 m->second.handler->release();
989 m->second.desired =
false;
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Store and operate with byte count.
std::string asString() const
Returns a default string representation of the Url object.
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
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.
std::string getScheme() const
Returns the scheme name of the URL.