@@ -23,12 +23,11 @@ import { IThemeService } from '../../../../platform/theme/common/themeService.js
23
23
import { getLocationBasedViewColors , ViewPane } from '../../../browser/parts/views/viewPane.js' ;
24
24
import { IViewletViewOptions } from '../../../browser/parts/views/viewsViewlet.js' ;
25
25
import { IViewDescriptorService } from '../../../common/views.js' ;
26
- import { IMcpWorkbenchService , IWorkbenchMcpServer , McpServerContainers , mcpServerIcon } from '../common/mcpTypes.js' ;
26
+ import { IMcpWorkbenchService , IWorkbenchMcpServer , McpServerContainers } from '../common/mcpTypes.js' ;
27
27
import { DropDownAction , InstallAction , ManageMcpServerAction } from './mcpServerActions.js' ;
28
- import { PublisherWidget , InstallCountWidget , RatingsWidget } from './mcpServerWidgets.js' ;
28
+ import { PublisherWidget , InstallCountWidget , RatingsWidget , McpServerIconWidget } from './mcpServerWidgets.js' ;
29
29
import { ActionRunner , IAction , Separator } from '../../../../base/common/actions.js' ;
30
30
import { IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js' ;
31
- import { ThemeIcon } from '../../../../base/common/themables.js' ;
32
31
33
32
export class McpServersListView extends ViewPane {
34
33
@@ -136,7 +135,6 @@ export class McpServersListView extends ViewPane {
136
135
interface IMcpServerTemplateData {
137
136
root : HTMLElement ;
138
137
element : HTMLElement ;
139
- icon : HTMLElement ;
140
138
name : HTMLElement ;
141
139
description : HTMLElement ;
142
140
installCount : HTMLElement ;
@@ -159,7 +157,8 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
159
157
160
158
renderTemplate ( root : HTMLElement ) : IMcpServerTemplateData {
161
159
const element = dom . append ( root , dom . $ ( '.mcp-server-item.extension-list-item' ) ) ;
162
- const icon = dom . append ( element , dom . $ ( '.icon-container' ) ) ;
160
+ const iconContainer = dom . append ( element , dom . $ ( '.icon-container' ) ) ;
161
+ const iconWidget = this . instantiationService . createInstance ( McpServerIconWidget , iconContainer ) ;
163
162
const details = dom . append ( element , dom . $ ( '.details' ) ) ;
164
163
const headerContainer = dom . append ( details , dom . $ ( '.header-container' ) ) ;
165
164
const header = dom . append ( headerContainer , dom . $ ( '.header' ) ) ;
@@ -188,6 +187,7 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
188
187
] ;
189
188
190
189
const widgets = [
190
+ iconWidget ,
191
191
publisherWidget ,
192
192
this . instantiationService . createInstance ( InstallCountWidget , installCount , true ) ,
193
193
this . instantiationService . createInstance ( RatingsWidget , ratings , true ) ,
@@ -198,7 +198,7 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
198
198
const disposable = combinedDisposable ( ...actions , ...widgets , actionbar , actionBarListener , extensionContainers ) ;
199
199
200
200
return {
201
- root, element, icon , name, description, installCount, ratings, disposables : [ disposable ] , actionbar,
201
+ root, element, name, description, installCount, ratings, disposables : [ disposable ] , actionbar,
202
202
mcpServerDisposables : [ ] ,
203
203
set mcpServer ( mcpServer : IWorkbenchMcpServer ) {
204
204
extensionContainers . mcpServer = mcpServer ;
@@ -210,25 +210,6 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
210
210
data . element . classList . remove ( 'loading' ) ;
211
211
data . mcpServerDisposables = dispose ( data . mcpServerDisposables ) ;
212
212
data . root . setAttribute ( 'data-mcp-server-id' , mcpServer . id ) ;
213
-
214
- dom . clearNode ( data . icon ) ;
215
- if ( mcpServer . iconUrl ) {
216
- const icon = dom . append ( data . icon , dom . $ < HTMLImageElement > ( 'img.icon' , { alt : '' } ) ) ;
217
- data . mcpServerDisposables . push ( dom . addDisposableListener ( icon , 'error' , ( ) => {
218
- dom . clearNode ( data . icon ) ;
219
- dom . append ( data . icon , dom . $ ( ThemeIcon . asCSSSelector ( mcpServerIcon ) ) ) ;
220
- } , { once : true } ) ) ;
221
- icon . src = mcpServer . iconUrl ;
222
- if ( ! icon . complete ) {
223
- data . icon . style . visibility = 'hidden' ;
224
- icon . onload = ( ) => icon . style . visibility = 'inherit' ;
225
- } else {
226
- icon . style . visibility = 'inherit' ;
227
- }
228
- } else {
229
- dom . append ( data . icon , dom . $ ( ThemeIcon . asCSSSelector ( mcpServerIcon ) ) ) ;
230
- }
231
-
232
213
data . name . textContent = mcpServer . label ;
233
214
data . description . textContent = mcpServer . description ;
234
215
0 commit comments