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));
211 time_t mtime = zypp::PathInfo(
"/etc/mtab").mtime();
214 WAR <<
"Failed to retrieve modification time of '/etc/mtab'"
220 static inline MountEntries
258 ManagedMedia tmp( handler, verifier);
260 tmp.handler->open(url, preferred_attach_point);
264 m_impl->mediaMap[nextId] = tmp;
266 DBG <<
"Opened new media access using id " << nextId
267 <<
" to " << url.
asString() << std::endl;
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="
367 << verifier->info() << std::endl;
376 ManagedMedia &ref(
m_impl->findMM(accessId));
380 ref.verifier.swap(verifier);
382 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier="
383 << verifier->info() << std::endl;
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 <<
"): "
631 << (desired ?
"" :
"not ")
632 <<
"desired (report by "
633 << v->info() <<
")" << std::endl;
650 ManagedMedia &ref(
m_impl->findMM(accessId));
653 path = ref.handler->localRoot();
660 const Pathname & pathname)
const
664 ManagedMedia &ref(
m_impl->findMM(accessId));
667 path = ref.handler->localPath(pathname);
673 const Pathname &filename,
674 const ByteCount &expectedFileSize )
const
678 ManagedMedia &ref(
m_impl->findMM(accessId));
680 ref.checkDesired(accessId);
682 ref.handler->provideFile(filename, expectedFileSize);
688 const Pathname &filename )
const
696 const Pathname &filename )
const
700 ManagedMedia &ref(
m_impl->findMM(accessId));
702 ref.checkDesired(accessId);
704 ref.handler->setDeltafile(filename);
710 const Pathname &dirname)
const
714 ManagedMedia &ref(
m_impl->findMM(accessId));
716 ref.checkDesired(accessId);
718 ref.handler->provideDir(dirname);
724 const Pathname &dirname)
const
728 ManagedMedia &ref(
m_impl->findMM(accessId));
730 ref.checkDesired(accessId);
732 ref.handler->provideDirTree(dirname);
738 const Pathname &filename)
const
742 ManagedMedia &ref(
m_impl->findMM(accessId));
744 ref.checkAttached(accessId);
746 ref.handler->releaseFile(filename);
752 const Pathname &dirname)
const
756 ManagedMedia &ref(
m_impl->findMM(accessId));
758 ref.checkAttached(accessId);
760 ref.handler->releaseDir(dirname);
767 const Pathname &pathname)
const
771 ManagedMedia &ref(
m_impl->findMM(accessId));
773 ref.checkAttached(accessId);
775 ref.handler->releasePath(pathname);
781 std::list<std::string> &retlist,
782 const Pathname &dirname,
787 ManagedMedia &ref(
m_impl->findMM(accessId));
790 ref.checkAttached(accessId);
792 ref.handler->dirInfo(retlist, dirname, dots);
799 const Pathname &dirname,
804 ManagedMedia &ref(
m_impl->findMM(accessId));
807 ref.checkAttached(accessId);
809 ref.handler->dirInfo(retlist, dirname, dots);
817 ManagedMedia &ref(
m_impl->findMM(accessId));
820 ref.checkAttached(accessId);
822 return ref.handler->doesFileExist(filename);
828 std::vector<std::string> & devices,
829 unsigned int & index)
const
832 ManagedMedia &ref(
m_impl->findMM(accessId));
833 return ref.handler->getDetectedDevices(devices, index);
860 if( path.empty() || path ==
"/" || !PathInfo(path).isDir())
868 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
869 for( ; m !=
m_impl->mediaMap.end(); ++m)
875 std::string our(path.asString());
883 if( mnt.size() > our.size() &&
884 mnt.at(our.size()) ==
'/' &&
885 !mnt.compare(0, our.size(), our))
900 MountEntries entries(
m_impl->getMountEntries());
901 MountEntries::const_iterator e;
902 for( e = entries.begin(); e != entries.end(); ++e)
904 std::string mnt(Pathname(e->dir).asString());
905 std::string our(path.asString());
913 if( mnt.size() > our.size() &&
914 mnt.at(our.size()) ==
'/' &&
915 !mnt.compare(0, our.size(), our))
932 ManagedMedia &ref(
m_impl->findMM(accessId));
934 return ref.handler->attachedMedia();
943 if( !media || media->type.empty())
946 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
947 for( ; m !=
m_impl->mediaMap.end(); ++m)
949 if( !m->second.handler->isAttached())
965 if( !media || media->type.empty())
968 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
969 for( ; m !=
m_impl->mediaMap.end(); ++m)
971 if( !m->second.handler->isAttached())
977 m->second.handler->release();
978 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.