reason = media::MediaChangeReport::IO_SOFT;
}
- // non interactive only bother the user if wrong medium is in the drive
- // otherwise propagate the error
- if ( ( options & PROVIDE_NON_INTERACTIVE ) && reason != media::MediaChangeReport::WRONG)
+ // Propagate the original error if _no_ callback receiver is connected, or
+ // non_interactive mode (for optional files) is used (except for wrong media).
+ if ( ! callback::SendReport<media::MediaChangeReport>::connected()
+ || (( options & PROVIDE_NON_INTERACTIVE ) && reason != media::MediaChangeReport::WRONG ) )
{
MIL << "Can't provide file. Non-Interactive mode." << endl;
ZYPP_RETHROW(excp);
media_nr,
_label,
reason,
- excp.asUserString(),
+ excp.asUserHistory(),
devices,
devindex
);
if( user == media::MediaChangeReport::ABORT )
{
DBG << "Aborting" << endl;
- ZYPP_RETHROW ( excp );
+ AbortRequestException aexcp("Aborting requested by user");
+ aexcp.remember(excp);
+ ZYPP_THROW(aexcp);
}
else if ( user == media::MediaChangeReport::IGNORE )
{
else if ( user == media::MediaChangeReport::EJECT )
{
DBG << "Eject: try to release" << endl;
- media_mgr.releaseAll();
- // eject
- media_mgr.release (media,
- devindex < devices.size() ? devices[devindex] : "");
+ try
+ {
+ media_mgr.releaseAll();
+ media_mgr.release (media, devindex < devices.size() ? devices[devindex] : "");
+ }
+ catch ( const Exception & e)
+ {
+ ZYPP_CAUGHT(e);
+ }
}
else if ( user == media::MediaChangeReport::RETRY ||
user == media::MediaChangeReport::CHANGE_URL )
media::MediaAccessId MediaSetAccess::getMediaAccessId (media::MediaNr medianr)
{
- media::MediaManager media_mgr;
-
- if (_medias.find(medianr) != _medias.end())
+ if ( _medias.find( medianr ) != _medias.end() )
{
- media::MediaAccessId id = _medias[medianr];
- return id;
+ return _medias[medianr];
}
- Url url;
- url = rewriteUrl (_url, medianr);
- media::MediaAccessId id = media_mgr.open(url, _prefAttachPoint);
+
+ Url url( medianr > 1 ? rewriteUrl( _url, medianr ) : _url );
+ media::MediaManager media_mgr;
+ media::MediaAccessId id = media_mgr.open( url, _prefAttachPoint );
_medias[medianr] = id;
try
{
- if (_verifiers.find(medianr) != _verifiers.end())
+ if ( _verifiers.find(medianr) != _verifiers.end() )
{
// a verifier is set for this media
// FIXME check the case where the verifier exists
// but we have no access id for the media
- media::MediaAccessId id = _medias[medianr];
- media::MediaManager media_mgr;
- media_mgr.delVerifier(id);
+ media_mgr.delVerifier( id );
media_mgr.addVerifier( id, _verifiers[medianr] );
// remove any saved verifier for this media
- _verifiers.erase(medianr);
+ _verifiers.erase( medianr );
}
}
catch ( const Exception &e )