Skip to content

Commit

Permalink
Merge 10922f3 into 61ba80d
Browse files Browse the repository at this point in the history
  • Loading branch information
J-N-K authored Jan 15, 2023
2 parents 61ba80d + 10922f3 commit eb3190e
Show file tree
Hide file tree
Showing 13 changed files with 246 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="basicui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>Basic UI</name>
<description>This is the openHAB Basic UI.</description>

<service-id>org.openhab.basicui</service-id>

<config-description-ref uri="ui:basic"/>

</addon:addon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="cometvisu-php" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>CometVisu PHP Extension</name>
<description>This is the PHP Extension for the CometVisu backend.</description>

</addon:addon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="cometvisu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>CometVisu Backend</name>
<description>This is the backend for the CometVisu.</description>

<service-id>org.openhab.cometvisu</service-id>

<config-description-ref uri="ui:cometvisu"/>

</addon:addon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="habot" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>HABot</name>
<description>This is the add-on for HABot.</description>

<service-id>org.openhab.habot</service-id>

<config-description-ref uri="ui:habot"/>

</addon:addon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="habpanel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>HABPanel</name>
<description>This is the add-on for HABPanel.</description>

</addon:addon>
10 changes: 10 additions & 0 deletions bundles/org.openhab.ui/src/main/resources/OH-INF/addon/addon.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon:addon id="ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">

<type>ui</type>
<name>Main UI</name>
<description>This is the openHAB Main UI.</description>

</addon:addon>
9 changes: 7 additions & 2 deletions bundles/org.openhab.ui/web/src/js/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ const SettingsMenuPage = () => import(/* webpackChunkName: "admin-base" */ '../p
const ServiceSettingsPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/services/service-settings.vue')
const AddonsListPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/addons-list.vue')
const AddonsAddPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/addons-add.vue')
const AddonsConfigureBindingPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/binding-config.vue')
const AddonsConfigureBindingPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/addon-config.vue')
const OldAddonsConfigureBindingPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/binding-config.vue')
const AddonsStorePage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/addons-store.vue')
const AddonDetailsPage = () => import(/* webpackChunkName: "admin-base" */ '../pages/settings/addons/addon-details.vue')

Expand Down Expand Up @@ -243,11 +244,15 @@ export default [
async: loadAsync(AddonDetailsPage)
},
{
path: ':bindingId/config',
path: ':addonId/config',
async: loadAsync(AddonsConfigureBindingPage)
}
]
},
{
path: 'bindings/:bindingId/config',
async: loadAsync(OldAddonsConfigureBindingPage)
},
{
path: 'services/:serviceId',
beforeLeave: checkDirtyBeforeLeave,
Expand Down
146 changes: 146 additions & 0 deletions bundles/org.openhab.ui/web/src/pages/settings/addons/addon-config.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
<template>
<f7-page>
<f7-navbar :title="'Configure ' + addon.label" back-link="Back">
<f7-nav-right>
<f7-link @click="save()" v-if="$theme.md" icon-md="material:save" icon-only />
<f7-link @click="save()" v-if="!$theme.md">
Save
</f7-link>
</f7-nav-right>
</f7-navbar>
<f7-block form v-if="configDescription && config" class="service-config block-narrow">
<f7-col>
<f7-block-title medium>
Add-on configuration
</f7-block-title>
<config-sheet
:parameter-groups="configDescription.parameterGroups"
:parameters="configDescription.parameters"
:configuration="config" />
</f7-col>
</f7-block>
<f7-block form v-if="loggerPackages.length > 0" class="service-config block-narrow">
<f7-col>
<f7-block-title medium>
Add-on log settings
</f7-block-title>
<f7-list class="col wide">
<f7-list-item v-for="loggerPackage in loggerPackages" :key="loggerPackage.loggerName"
:title="loggerPackage.loggerName">
<f7-input type="select" :value="loggerPackage.level"
@input="loggerPackage.level = $event.target.value; loggerPackage.changed = true">
<option value="DEFAULT">
Default
</option>
<option value="TRACE">
Trace
</option>
<option value="DEBUG">
Debug
</option>
<option value="INFO">
Info
</option>
<option value="WARN">
Warning
</option>
<option value="ERROR">
Error
</option>
</f7-input>
</f7-list-item>
</f7-list>
</f7-col>
</f7-block>
</f7-page>
</template>

<script>
import ConfigSheet from '@/components/config/config-sheet.vue'
export default {
components: {
ConfigSheet
},
props: ['addonId'],
data () {
return {
addon: {},
configDescription: null,
config: null,
bindingId: null,
loggerPackages: [],
serviceId: null,
strippedAddonId: ''
}
},
methods: {
save () {
let promises = []
this.loggerPackages.forEach(logger => {
if (logger.changed === true) {
if (logger.level === 'DEFAULT') {
promises.push(this.$oh.api.delete('/rest/logging/' + logger.loggerName))
} else {
delete logger.changed
promises.push(this.$oh.api.put('/rest/logging/' + logger.loggerName, logger))
}
}
})
if (this.configDescription && this.config) {
promises.push(this.$oh.api.put('/rest/addons/' + this.bindingId + '/config', this.config))
}
Promise.all(promises).then(() => {
this.$f7.toast.create({
text: 'Saved',
destroyOnClose: true,
closeTimeout: 2000
}).open()
})
this.$f7router.back()
}
},
created () {
let serviceSeparator = this.addonId.indexOf(':')
if (serviceSeparator === -1) {
this.strippedAddonId = this.addonId
} else {
this.strippedAddonId = this.addonId.substring(serviceSeparator + 1)
this.serviceId = this.addonId.substring(0, serviceSeparator)
}
let requestUri = '/rest/addons/' + this.strippedAddonId + (this.serviceId ? '?serviceId=' + this.serviceId : '')
this.$oh.api.get(requestUri).then(data => {
this.addon = data
let configDescriptionURI = this.addon.configDescriptionURI
if (configDescriptionURI) {
this.$oh.api.get('/rest/config-descriptions/' + configDescriptionURI).then(data2 => {
this.configDescription = data2
this.bindingId = this.strippedAddonId
this.$oh.api.get('/rest/addons/' + this.bindingId + '/config').then(data3 => {
this.config = data3
})
})
}
if (Array.isArray(this.addon.loggerPackages)) {
this.addon.loggerPackages.forEach(loggerPackage => {
this.$oh.api.get('/rest/logging/' + loggerPackage).then(data4 => {
data4.loggers.forEach(logger => this.loggerPackages.push(logger))
})
})
}
})
}
}
</script>

<style lang="stylus">
.service-config
.item-input-info
white-space normal
</style>
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export default {
this.addon = data
if (this.addon.type === 'binding' && this.addon.installed) {
this.$oh.api.get('/rest/bindings').then(data2 => {
this.$oh.api.get('/rest/addons').then(data2 => {
this.bindingInfo = data2.find(b => b.id === this.addonId.replace('binding-', '')) || {}
self.$f7.preloader.hide()
setTimeout(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<f7-preloader v-if="isPending(addon)" color="blue" />
<f7-button v-else-if="addon.installed" class="install-button" text="Remove" color="red" round small fill @click="openAddonPopup" />
<f7-button v-else class="install-button" :text="installableAddon(addon) ? 'Install' : 'Add'" color="blue" round small fill @click="openAddonPopup" />
<f7-link v-if="!isPending(addon) && bindingInfo && bindingInfo.configDescriptionURI" icon-f7="gears" tooltip="Configure Binding" color="blue" :href="'/settings/addons/' + bindingInfo.id + '/config'" round small />
<f7-link v-if="showConfig" icon-f7="gears" tooltip="Configure add-on" color="blue" :href="'/settings/addons/' + addonId + '/config'" round small />
</div>
</div>
</div>
Expand Down Expand Up @@ -204,6 +204,9 @@ export default {
}
},
computed: {
showConfig () {
return this.addon && this.addon.installed && (this.addon.configDescriptionURI || this.addon.loggerPackages.length > 0)
},
realAddonId () {
if (!this.addon) return null
return (this.addon.id.indexOf(':') > 0) ? this.addon.id.substring(this.addon.id.indexOf(':') + 1) : this.addon.id
Expand Down Expand Up @@ -279,14 +282,14 @@ export default {
})
if (this.addon.type === 'binding' && this.addonId.indexOf('binding-') === 0 && this.addon.installed) {
this.$oh.api.get('/rest/bindings').then(data2 => {
this.$oh.api.get('/rest/addons').then(data2 => {
this.bindingInfo = data2.find(b => b.id === this.addonId.replace('binding-', '')) || {}
})
}
})
},
processDescription () {
if (!this.addon.description && this.addon.author === 'openHAB') {
if (this.addon.author === 'openHAB') {
// assuming the add-on is an official one (distribution), try to fetch the documentation from GitHub
let docsBranch = 'final'
if (this.$store.state.runtimeInfo.buildString === 'Release Build') docsBranch = 'final-stable'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export default {
},
methods: {
save () {
this.$oh.api.put('/rest/bindings/' + this.bindingId + '/config', this.config).then(() => {
this.$oh.api.put('/rest/addons/' + this.bindingId + '/config', this.config).then(() => {
this.$f7.toast.create({
text: 'Saved',
destroyOnClose: true,
Expand All @@ -47,14 +47,14 @@ export default {
}
},
created () {
this.$oh.api.get('/rest/bindings').then(data => {
this.$oh.api.get('/rest/addons').then(data => {
this.binding = data.find((b) => b.id === this.bindingId)
if (this.binding.configDescriptionURI) {
this.$oh.api.get('/rest/config-descriptions/' + this.binding.configDescriptionURI).then(data2 => {
this.configDescriptions = data2
this.$oh.api.get('/rest/bindings/' + this.bindingId + '/config').then(data3 => {
this.$oh.api.get('/rest/addons/' + this.bindingId + '/config').then(data3 => {
this.config = data3
})
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,12 @@
media-item
:key="binding.id"
:link="binding.id"
:title="binding.name"
:title="binding.label"
:header="binding.id"
:badge="inbox.filter((e) => e.thingTypeUID.split(':')[0] === binding.id && e.flag !== 'IGNORED').length || undefined"
badge-color="red"
:footer="(binding.description && binding.description.indexOf('<br>') >= 0) ?
binding.description.split('<br>')[0] : binding.description">
<f7-link slot="after" v-if="binding.configDescriptionURI" :href="`/settings/addons/${binding.id}/config`" class="margin-left" icon-size="20" icon-f7="gear_alt" color="gray" tooltip="Configure Binding" />
</f7-list-item>
binding.description.split('<br>')[0] : binding.description" />
</f7-list>
</f7-col>
</f7-block>
Expand Down Expand Up @@ -78,8 +76,9 @@ export default {
methods: {
onPageAfterIn () {
this.loading = true
this.$oh.api.get('/rest/bindings').then((data) => {
this.bindings = data.sort((a, b) => a.name.localeCompare(b.name))
this.$oh.api.get('/rest/addons').then((data) => {
let installedBindings = data.filter(addon => addon.type === 'binding' && addon.installed === true)
this.bindings = installedBindings.sort((a, b) => a.label.localeCompare(b.label))
this.loading = false
this.initSearchbar = true
this.ready = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,9 @@ export default {
},
onPageAfterIn () {
this.loading = true
this.$oh.api.get('/rest/thing-types?bindingId=' + this.bindingId).then((data) => {
this.thingTypes = data.filter((tt) => tt.UID.split(':')[0] === this.bindingId && tt.listed)
this.rawBindingId = this.bindingId.substring('binding-'.length)
this.$oh.api.get('/rest/thing-types?bindingId=' + this.rawBindingId).then((data) => {
this.thingTypes = data.filter((tt) => tt.UID.split(':')[0] === this.rawBindingId && tt.listed)
.sort((a, b) => {
if (a.bridge && !b.bridge) return -1
if (b.bridge && !a.bridge) return 1
Expand All @@ -115,7 +116,7 @@ export default {
this.ready = true
this.loadInbox()
this.$oh.api.get('/rest/discovery').then((data) => {
if (data.indexOf(this.bindingId) >= 0) {
if (data.indexOf(this.rawBindingId) >= 0) {
this.discoverySupported = true
// this.scan()
}
Expand All @@ -137,7 +138,7 @@ export default {
return
}
this.scanning = true
this.$oh.api.postPlain('/rest/discovery/bindings/' + this.bindingId + '/scan', null, 'text/plain', 'text/plain').then((data) => {
this.$oh.api.postPlain('/rest/discovery/bindings/' + this.rawBindingId + '/scan', null, 'text/plain', 'text/plain').then((data) => {
try {
this.scanTimeout = parseInt(data)
this.scanProgress = 0
Expand All @@ -158,7 +159,7 @@ export default {
this.loading = true
this.$oh.api.get('/rest/inbox').then((data) => {
this.loading = false
this.scanResults = data.filter((e) => e.thingTypeUID.split(':')[0] === this.bindingId && e.flag !== 'IGNORED')
this.scanResults = data.filter((e) => e.thingTypeUID.split(':')[0] === this.rawBindingId && e.flag !== 'IGNORED')
const searchbar = this.$refs.searchbar.$el.f7Searchbar
const filterQuery = searchbar.query
this.initSearchbar = false
Expand Down

0 comments on commit eb3190e

Please sign in to comment.