HTTP Libraries: Add support for descriptions of sublibraries

This commit is contained in:
Rosy 2024-04-30 11:57:00 +00:00 committed by Jon Evans
parent 7ed755ac61
commit 17891f7a1d
9 changed files with 54 additions and 14 deletions

View File

@ -143,8 +143,15 @@ bool HTTP_LIB_CONNECTION::syncCategories()
{ {
HTTP_LIB_CATEGORY category; HTTP_LIB_CATEGORY category;
category.id = item.value()["id"].get<std::string>(); auto& value = item.value();
category.name = item.value()["name"].get<std::string>(); category.id = value["id"].get<std::string>();
category.name = value["name"].get<std::string>();
if( value.contains( "description" ) )
{
category.description = value["description"].get<std::string>();
m_categoryDescriptions[category.name] = category.description;
}
m_categories.push_back( category ); m_categories.push_back( category );
} }
@ -179,12 +186,12 @@ bool HTTP_LIB_CONNECTION::SelectOne( const std::string& aPartID, HTTP_LIB_PART&
if( m_cachedParts.find( aPartID ) != m_cachedParts.end() ) if( m_cachedParts.find( aPartID ) != m_cachedParts.end() )
{ {
// check if it's outdated, if so re-fetch // check if it's outdated, if so re-fetch
if( std::difftime( std::time( nullptr ), m_cachedParts[aPartID].lastCached ) < m_source.timeout_parts ) if( std::difftime( std::time( nullptr ), m_cachedParts[aPartID].lastCached )
< m_source.timeout_parts )
{ {
aFetchedPart = m_cachedParts[aPartID]; aFetchedPart = m_cachedParts[aPartID];
return true; return true;
} }
} }
std::string res = ""; std::string res = "";

View File

@ -193,6 +193,10 @@ void SCH_IO_HTTP_LIB::GetSubLibraryNames( std::vector<wxString>& aNames )
} }
} }
wxString SCH_IO_HTTP_LIB::GetSubLibraryDescription( const wxString& aName )
{
return m_conn->getCategoryDescription( std::string( aName.mb_str() ) );
}
void SCH_IO_HTTP_LIB::GetAvailableSymbolFields( std::vector<wxString>& aNames ) void SCH_IO_HTTP_LIB::GetAvailableSymbolFields( std::vector<wxString>& aNames )
{ {

View File

@ -62,6 +62,8 @@ public:
void GetSubLibraryNames( std::vector<wxString>& aNames ) override; void GetSubLibraryNames( std::vector<wxString>& aNames ) override;
wxString GetSubLibraryDescription( const wxString& aName ) override;
void GetAvailableSymbolFields( std::vector<wxString>& aNames ) override; void GetAvailableSymbolFields( std::vector<wxString>& aNames ) override;
void GetDefaultSymbolFields( std::vector<wxString>& aNames ) override; void GetDefaultSymbolFields( std::vector<wxString>& aNames ) override;

View File

@ -301,6 +301,17 @@ public:
*/ */
virtual void GetSubLibraryNames( std::vector<wxString>& aNames ) {} virtual void GetSubLibraryNames( std::vector<wxString>& aNames ) {}
/**
* Gets a description of a sublibrary.
*
* Has no effect if SupportsSubLibraries() returns false.
*
* @param aName contains the name of the sublibrary for which the description is retrieved
*
* @return the description of the sublibrary
*/
virtual wxString GetSubLibraryDescription( const wxString& aName ) { return wxEmptyString; }
/** /**
* Retrieves a list of (custom) field names that are present on symbols in this library. * Retrieves a list of (custom) field names that are present on symbols in this library.
* The plugin is responsible for guaranteeing that this list contains the set of unique * The plugin is responsible for guaranteeing that this list contains the set of unique

View File

@ -104,6 +104,15 @@ void SYMBOL_LIB_TABLE_ROW::GetSubLibraryNames( std::vector<wxString>& aNames ) c
} }
wxString SYMBOL_LIB_TABLE_ROW::GetSubLibraryDescription( const wxString& aName ) const
{
if( !plugin )
return wxEmptyString;
return plugin->GetSubLibraryDescription( aName );
}
void SYMBOL_LIB_TABLE_ROW::ShowSettingsDialog( wxWindow* aParent ) const void SYMBOL_LIB_TABLE_ROW::ShowSettingsDialog( wxWindow* aParent ) const
{ {
wxCHECK( plugin, /* void */ ); wxCHECK( plugin, /* void */ );

View File

@ -95,6 +95,8 @@ public:
void GetSubLibraryNames( std::vector<wxString>& aNames ) const; void GetSubLibraryNames( std::vector<wxString>& aNames ) const;
wxString GetSubLibraryDescription( const wxString& aName ) const;
/** /**
* @see SCH_IO::GetAvailableSymbolFields * @see SCH_IO::GetAvailableSymbolFields
*/ */

View File

@ -158,10 +158,11 @@ bool SYMBOL_TREE_MODEL_ADAPTER::AddLibraries( const std::vector<wxString>& aNick
wxString suffix = lib.IsEmpty() ? wxString( wxT( "" ) ) wxString suffix = lib.IsEmpty() ? wxString( wxT( "" ) )
: wxString::Format( wxT( " - %s" ), lib ); : wxString::Format( wxT( " - %s" ), lib );
wxString name = wxString::Format( wxT( "%s%s" ), libNickname, suffix ); wxString name = wxString::Format( wxT( "%s%s" ), libNickname, suffix );
wxString desc; wxString desc = row->GetSubLibraryDescription( lib );
if( !parentDesc.IsEmpty() ) if( !parentDesc.IsEmpty() )
desc = wxString::Format( wxT( "%s (%s)" ), parentDesc, lib ); desc = wxString::Format( wxT( "%s (%s)" ), parentDesc,
( desc.IsEmpty() ) ? lib : desc );
UTF8 utf8Lib( lib ); UTF8 utf8Lib( lib );

View File

@ -60,15 +60,18 @@ public:
std::vector<HTTP_LIB_CATEGORY> getCategories() const { return m_categories; } std::vector<HTTP_LIB_CATEGORY> getCategories() const { return m_categories; }
std::string getCategoryDescription( const std::string& aCategoryName ) const
{
return m_categoryDescriptions.at( aCategoryName );
}
auto getCachedParts() { return m_cache; } auto getCachedParts() { return m_cache; }
private: private:
// This is clunky but at the moment the only way to free the pointer after use without KiCad crashing. // This is clunky but at the moment the only way to free the pointer after use without KiCad crashing.
// at this point we can't use smart pointers as there is a problem with the order of how things are deleted/freed // at this point we can't use smart pointers as there is a problem with the order of how things are deleted/freed
std::unique_ptr<KICAD_CURL_EASY> createCurlEasyObject() std::unique_ptr<KICAD_CURL_EASY> createCurlEasyObject()
{ {
std::unique_ptr<KICAD_CURL_EASY> aCurl( new KICAD_CURL_EASY() ); std::unique_ptr<KICAD_CURL_EASY> aCurl( new KICAD_CURL_EASY() );
// prepare curl // prepare curl
@ -101,6 +104,7 @@ private:
std::string m_lastError; std::string m_lastError;
std::vector<HTTP_LIB_CATEGORY> m_categories; std::vector<HTTP_LIB_CATEGORY> m_categories;
std::map<std::string, std::string> m_categoryDescriptions;
std::map<std::string, std::string> m_parts; std::map<std::string, std::string> m_parts;
@ -108,7 +112,6 @@ private:
const std::string http_endpoint_parts = "parts"; const std::string http_endpoint_parts = "parts";
const std::string http_endpoint_settings = "settings"; const std::string http_endpoint_settings = "settings";
const std::string http_endpoint_auth = "authentication"; const std::string http_endpoint_auth = "authentication";
}; };
#endif //KICAD_HTTP_LIB_CONNECTION_H #endif //KICAD_HTTP_LIB_CONNECTION_H

View File

@ -63,6 +63,7 @@ struct HTTP_LIB_CATEGORY
{ {
std::string id; ///< id of category std::string id; ///< id of category
std::string name; ///< name of category std::string name; ///< name of category
std::string description; ///< description of category
std::time_t lastCached = 0; std::time_t lastCached = 0;