77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package plugins
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"strings"
|
|
|
|
"github.com/AvengeMedia/danklinux/internal/plugins"
|
|
"github.com/AvengeMedia/danklinux/internal/server/models"
|
|
)
|
|
|
|
func HandleListInstalled(conn net.Conn, req models.Request) {
|
|
manager, err := plugins.NewManager()
|
|
if err != nil {
|
|
models.RespondError(conn, req.ID, fmt.Sprintf("failed to create manager: %v", err))
|
|
return
|
|
}
|
|
|
|
installedNames, err := manager.ListInstalled()
|
|
if err != nil {
|
|
models.RespondError(conn, req.ID, fmt.Sprintf("failed to list installed plugins: %v", err))
|
|
return
|
|
}
|
|
|
|
registry, err := plugins.NewRegistry()
|
|
if err != nil {
|
|
models.RespondError(conn, req.ID, fmt.Sprintf("failed to create registry: %v", err))
|
|
return
|
|
}
|
|
|
|
allPlugins, err := registry.List()
|
|
if err != nil {
|
|
models.RespondError(conn, req.ID, fmt.Sprintf("failed to list plugins: %v", err))
|
|
return
|
|
}
|
|
|
|
pluginMap := make(map[string]plugins.Plugin)
|
|
for _, p := range allPlugins {
|
|
pluginMap[p.ID] = p
|
|
}
|
|
|
|
result := make([]PluginInfo, 0, len(installedNames))
|
|
for _, id := range installedNames {
|
|
if plugin, ok := pluginMap[id]; ok {
|
|
hasUpdate := false
|
|
if hasUpdates, err := manager.HasUpdates(id, plugin); err == nil {
|
|
hasUpdate = hasUpdates
|
|
}
|
|
|
|
result = append(result, PluginInfo{
|
|
ID: plugin.ID,
|
|
Name: plugin.Name,
|
|
Category: plugin.Category,
|
|
Author: plugin.Author,
|
|
Description: plugin.Description,
|
|
Repo: plugin.Repo,
|
|
Path: plugin.Path,
|
|
Capabilities: plugin.Capabilities,
|
|
Compositors: plugin.Compositors,
|
|
Dependencies: plugin.Dependencies,
|
|
FirstParty: strings.HasPrefix(plugin.Repo, "https://github.com/AvengeMedia"),
|
|
HasUpdate: hasUpdate,
|
|
})
|
|
} else {
|
|
result = append(result, PluginInfo{
|
|
ID: id,
|
|
Name: id,
|
|
Note: "not in registry",
|
|
})
|
|
}
|
|
}
|
|
|
|
SortPluginInfoByFirstParty(result)
|
|
|
|
models.Respond(conn, req.ID, result)
|
|
}
|