Add custom icon & multiple apps support to Docker API

This commit is contained in:
Pablo Ruiz 2021-09-29 22:26:12 +02:00
parent ebae61a688
commit 9606978bd7
2 changed files with 43 additions and 10 deletions

View file

@ -174,6 +174,17 @@ labels:
- flame.name=My container
- flame.url=https://example.com
- flame.icon=icon-name # Optional, default is "docker"
# - flame.icon=custom to make changes in app. ie: custom icon upload
```
You can set up different apps in the same label adding `;` between each one.
```yml
labels:
- flame.type=application
- flame.name=First App;Second App
- flame.url=https://example1.com;https://example2.com
- flame.icon=icon-name1;icon-name2
```
And you must have activated the Docker sync option in the settings panel.

View file

@ -92,11 +92,17 @@ exports.getApps = asyncWrapper(async (req, res, next) => {
'flame.url' in labels &&
/^app/.test(labels['flame.type'])
) {
dockerApps.push({
name: labels['flame.name'],
url: labels['flame.url'],
icon: labels['flame.icon'] || 'docker'
});
for (let i=0; i < labels['flame.name'].split(';').length; i++) {
const names = labels['flame.name'].split(';');
const urls = labels['flame.url'].split(';');
const icons = labels['flame.icon'].split(';');
dockerApps.push({
name: names[i] || names[0],
url: urls[i] || urls[0],
icon: icons[i] || 'docker'
});
}
}
}
@ -107,13 +113,29 @@ exports.getApps = asyncWrapper(async (req, res, next) => {
}
for (const item of dockerApps) {
if (apps.some(app => app.name === item.name)) {
const app = apps.filter(e => e.name === item.name)[0];
await app.update({ ...item, isPinned: true });
if (apps.some((app) => app.name === item.name)) {
const app = apps.filter((e) => e.name === item.name)[0];
if(item.icon === 'custom') {
await app.update({
name: item.name,
url: item.url,
isPinned: true,
});
} else {
await app.update({
name: item.name,
url: item.url,
icon: item.icon,
isPinned: true,
});
}
} else {
await App.create({
...item,
isPinned: true
name: item.name,
url: item.url,
icon: item.icon === 'custom' ? 'docker' : item.icon,
isPinned: true,
});
}
}