Go to the documentation of this file.
49 ManagedMedia(
const ManagedMedia &m)
66 DBG <<
"checkAttached(" <<
id <<
") not attached" << std::endl;
85 media::MediaNotDesiredException newEx (
handler->url() );
92 DBG <<
"checkDesired(" <<
id <<
"): not desired (report by " <<
verifier->info() <<
")" << std::endl;
96 DBG <<
"checkDesired(" <<
id <<
"): desired (report by " <<
verifier->info() <<
")" << std::endl;
98 DBG <<
"checkDesired(" <<
id <<
"): desired (cached)" << std::endl;
109 typedef std::map<MediaAccessId, ManagedMedia> ManagedMediaMap;
120 return std::string(
typeid((*
this)).name());
128 return std::string(
"zypp::media::NoVerifier");
151 ManagedMediaMap::iterator it;
158 if( it->second.handler->dependsOnParent())
163 it->second.handler->resetParentId();
190 inline ManagedMedia &
193 ManagedMediaMap::iterator it(
mediaMap.find(accessId));
209 WAR <<
"Failed to retrieve modification time of '/etc/mtab'"
215 static inline MountEntries
252 tmp.handler->open(
url, preferred_attach_point);
256 m_impl->mediaMap[nextId] = tmp;
258 DBG <<
"Opened new media access using id " << nextId
277 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
278 for( ; m !=
m_impl->mediaMap.end(); ++m)
280 if( m->second.handler->dependsOnParent(accessId,
true))
283 m->second.handler->url().asString()
288 DBG <<
"Close to access handler using id "
289 << accessId <<
" requested" << std::endl;
291 ManagedMedia &ref(
m_impl->findMM(accessId));
292 ref.handler->close();
294 m_impl->mediaMap.erase(accessId);
301 ManagedMediaMap::iterator it(
m_impl->mediaMap.find(accessId));
302 return it !=
m_impl->mediaMap.end() &&
303 it->second.handler->isOpen();
310 ManagedMedia &ref(
m_impl->findMM(accessId));
312 return ref.handler->protocol();
319 ManagedMedia &ref(
m_impl->findMM(accessId));
321 return ref.handler->downloads();
328 ManagedMedia &ref(
m_impl->findMM(accessId));
330 return ref.handler->url();
341 ManagedMedia &ref(
m_impl->findMM(accessId));
346 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier="
354 ManagedMedia &ref(
m_impl->findMM(accessId));
360 DBG <<
"MediaVerifier change: id=" << accessId <<
", verifier="
374 ManagedMedia &ref(
m_impl->findMM(accessId));
376 DBG <<
"attach(id=" << accessId <<
")" << std::endl;
379 ref.handler->attach(
false);
382 ref.checkDesired(accessId);
389 if (!ref.handler->hasMoreDevices())
392 if (ref.handler->isAttached())
393 ref.handler->release();
396 MIL <<
"checkDesired(" << accessId <<
") of first device failed,"
397 " going to try others with attach(true)" << std::endl;
399 while (ref.handler->hasMoreDevices())
404 ref.handler->attach(
true);
405 ref.checkDesired(accessId);
412 if (!ref.handler->hasMoreDevices())
414 MIL <<
"No desired media found after trying all detected devices." << std::endl;
419 DBG <<
"Skipping " << media.
mediaSource->asString() <<
": not desired media." << std::endl;
421 ref.handler->release();
427 if (!ref.handler->hasMoreDevices())
431 DBG <<
"Skipping " << media.
mediaSource->asString() <<
" because of exception thrown by attach(true)" << std::endl;
433 if (ref.handler->isAttached()) ref.handler->release();
442 ManagedMedia &ref(
m_impl->findMM(accessId));
444 DBG <<
"release(id=" << accessId;
445 if (!ejectDev.empty())
446 DBG <<
", " << ejectDev;
447 DBG <<
")" << std::endl;
449 if(!ejectDev.empty())
457 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
458 for( ; m !=
m_impl->mediaMap.end(); ++m)
460 if( m->second.handler->dependsOnParent(accessId,
false))
464 DBG <<
"Forcing release of handler depending on access id "
465 << accessId << std::endl;
466 m->second.desired =
false;
467 m->second.handler->release();
477 ref.handler->release(ejectDev);
484 MIL <<
"Releasing all attached media" << std::endl;
486 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
487 for( ; m !=
m_impl->mediaMap.end(); ++m)
489 if( m->second.handler->dependsOnParent())
494 if(m->second.handler->isAttached())
496 DBG <<
"Releasing media id " << m->first << std::endl;
497 m->second.desired =
false;
498 m->second.handler->release();
502 DBG <<
"Media id " << m->first <<
" not attached " << std::endl;
508 ERR <<
"Failed to release media id " << m->first << std::endl;
512 MIL <<
"Exit" << std::endl;
519 ManagedMedia &ref(
m_impl->findMM(accessId));
521 ref.handler->disconnect();
528 ManagedMedia &ref(
m_impl->findMM(accessId));
530 return ref.handler->isAttached();
536 ManagedMedia &ref(
m_impl->findMM(accessId));
538 return ref.handler->isSharedMedia();
545 ManagedMedia &ref(
m_impl->findMM(accessId));
547 if( !ref.handler->isAttached())
554 ref.desired = ref.verifier->isDesiredMedia(ref.handler);
561 DBG <<
"isDesiredMedia(" << accessId <<
"): "
562 << (ref.desired ?
"" :
"not ")
563 <<
"desired (report by "
564 << ref.verifier->info() <<
")" << std::endl;
577 ManagedMedia &ref(
m_impl->findMM(accessId));
580 if( ref.handler->isAttached())
583 desired = v->isDesiredMedia(ref.handler);
590 DBG <<
"isDesiredMedia(" << accessId <<
"): "
592 <<
"desired (report by "
593 << v->info() <<
")" << std::endl;
608 ManagedMedia &ref(
m_impl->findMM(accessId));
611 path = ref.handler->localRoot();
620 ManagedMedia &ref(
m_impl->findMM(accessId));
623 path = ref.handler->localPath(pathname);
630 const ByteCount &expectedFileSize )
const
632 ManagedMedia &ref(
m_impl->findMM(accessId));
634 ref.checkDesired(accessId);
636 ref.handler->provideFile(filename, expectedFileSize);
652 ManagedMedia &ref(
m_impl->findMM(accessId));
654 ref.checkDesired(accessId);
656 ref.handler->setDeltafile(filename);
664 ManagedMedia &ref(
m_impl->findMM(accessId));
666 ref.checkDesired(accessId);
668 ref.handler->provideDir(dirname);
676 ManagedMedia &ref(
m_impl->findMM(accessId));
678 ref.checkDesired(accessId);
680 ref.handler->provideDirTree(dirname);
688 ManagedMedia &ref(
m_impl->findMM(accessId));
690 ref.checkAttached(accessId);
692 ref.handler->releaseFile(filename);
700 ManagedMedia &ref(
m_impl->findMM(accessId));
702 ref.checkAttached(accessId);
704 ref.handler->releaseDir(dirname);
713 ManagedMedia &ref(
m_impl->findMM(accessId));
715 ref.checkAttached(accessId);
717 ref.handler->releasePath(pathname);
723 std::list<std::string> &retlist,
727 ManagedMedia &ref(
m_impl->findMM(accessId));
730 ref.checkAttached(accessId);
732 ref.handler->dirInfo(retlist, dirname, dots);
742 ManagedMedia &ref(
m_impl->findMM(accessId));
745 ref.checkAttached(accessId);
747 ref.handler->dirInfo(retlist, dirname, dots);
754 ManagedMedia &ref(
m_impl->findMM(accessId));
757 ref.checkAttached(accessId);
759 return ref.handler->doesFileExist(filename);
765 std::vector<std::string> & devices,
766 unsigned int & index)
const
768 ManagedMedia &ref(
m_impl->findMM(accessId));
769 return ref.handler->getDetectedDevices(devices, index);
799 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
800 for( ; m !=
m_impl->mediaMap.end(); ++m)
814 if( mnt.size() > our.size() &&
815 mnt.at(our.size()) ==
'/' &&
816 !mnt.compare(0, our.size(), our))
831 MountEntries entries(
m_impl->getMountEntries());
832 MountEntries::const_iterator e;
833 for( e = entries.begin(); e != entries.end(); ++e)
844 if( mnt.size() > our.size() &&
845 mnt.at(our.size()) ==
'/' &&
846 !mnt.compare(0, our.size(), our))
861 ManagedMedia &ref(
m_impl->findMM(accessId));
863 return ref.handler->attachedMedia();
870 if( !media || media->type.empty())
873 ManagedMediaMap::const_iterator m(
m_impl->mediaMap.begin());
874 for( ; m !=
m_impl->mediaMap.end(); ++m)
876 if( !m->second.handler->isAttached())
890 if( !media || media->type.empty())
893 ManagedMediaMap::iterator m(
m_impl->mediaMap.begin());
894 for( ; m !=
m_impl->mediaMap.end(); ++m)
896 if( !m->second.handler->isAttached())
902 m->second.handler->release();
903 m->second.desired =
false;
std::string getScheme() const
Returns the scheme name of the URL.
Base class for Exception.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Store and operate with byte count.
Wrapper for const correct access via Smart pointer types.
Wrapper class for ::stat/::lstat.
std::string asString() const
Returns a default string representation of the Url object.
Easy-to use interface to the ZYPP dependency resolver.
std::list< DirEntry > DirContent
Returned by readdir.
std::string numstring(char n, int w=0)
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
bool empty() const
Test for an empty path.
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
const std::string & asString() const
String representation.