Catch errors when saving individual symbols

Fixes https://gitlab.com/kicad/code/kicad/issues/11566
This commit is contained in:
Seth Hillbrand 2022-05-06 09:47:06 -07:00
parent 827abb01a3
commit f4d4f23876
1 changed files with 27 additions and 19 deletions

View File

@ -225,30 +225,38 @@ bool SYMBOL_LIBRARY_MANAGER::SaveLibrary( const wxString& aLibrary, const wxStri
{ {
LIB_SYMBOL* newSymbol; LIB_SYMBOL* newSymbol;
if( symbol->IsAlias() ) try
{ {
std::shared_ptr< LIB_SYMBOL > oldParent = symbol->GetParent().lock(); if( symbol->IsAlias() )
wxCHECK_MSG( oldParent, false,
wxString::Format( wxT( "Derived symbol '%s' found with undefined parent." ),
symbol->GetName() ) );
LIB_SYMBOL* libParent = pi->LoadSymbol( aLibrary, oldParent->GetName(),
&properties );
if( !libParent )
{ {
libParent = new LIB_SYMBOL( *oldParent.get() ); std::shared_ptr< LIB_SYMBOL > oldParent = symbol->GetParent().lock();
pi->SaveSymbol( aLibrary, libParent, &properties );
}
newSymbol = new LIB_SYMBOL( *symbol ); wxCHECK_MSG( oldParent, false,
newSymbol->SetParent( libParent ); wxString::Format( wxT( "Derived symbol '%s' found with undefined parent." ),
pi->SaveSymbol( aLibrary, newSymbol, &properties ); symbol->GetName() ) );
LIB_SYMBOL* libParent = pi->LoadSymbol( aLibrary, oldParent->GetName(),
&properties );
if( !libParent )
{
libParent = new LIB_SYMBOL( *oldParent.get() );
pi->SaveSymbol( aLibrary, libParent, &properties );
}
newSymbol = new LIB_SYMBOL( *symbol );
newSymbol->SetParent( libParent );
pi->SaveSymbol( aLibrary, newSymbol, &properties );
}
else if( !pi->LoadSymbol( aLibrary, symbol->GetName(), &properties ) )
{
pi->SaveSymbol( aLibrary, new LIB_SYMBOL( *symbol ), &properties );
}
} }
else if( !pi->LoadSymbol( aLibrary, symbol->GetName(), &properties ) ) catch( ... )
{ {
pi->SaveSymbol( aLibrary, new LIB_SYMBOL( *symbol ), &properties ); res = false;
break;
} }
} }
} }