Skip to content

Commit

Permalink
Merge pull request #114 from ReneeVandervelde/scenes
Browse files Browse the repository at this point in the history
Add list-scene endpoints
  • Loading branch information
ReneeVandervelde committed May 20, 2023
2 parents e9168b9 + 269a067 commit bf5cfc2
Show file tree
Hide file tree
Showing 10 changed files with 95 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cli/src/main/kotlin/inkapplications/shade/cli/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import inkapplications.shade.cli.lights.ListLightsCommand
import inkapplications.shade.cli.lights.UpdateLightCommand
import inkapplications.shade.cli.resources.ListResourcesCommand
import inkapplications.shade.cli.rooms.*
import inkapplications.shade.cli.scenes.ListScenesCommand
import inkapplications.shade.cli.zones.*
import kotlin.system.exitProcess

Expand All @@ -39,6 +40,7 @@ class Main: NoOpCliktCommand() {
ListLightsCommand,
ListResourcesCommand,
ListRoomsCommand,
ListScenesCommand,
ListZonesCommand,
UpdateDeviceCommand,
UpdateGroupedLightCommand,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package inkapplications.shade.cli.scenes

import inkapplications.shade.cli.AuthorizedShadeCommand

object ListScenesCommand: AuthorizedShadeCommand(
help = "Get all of the scenes configured on the Hue bridge",
) {
override suspend fun runCommand(): Int {
val scenes = shade.scenes.listScenes()

logger.debug("Got Scenes: $scenes")
scenes.forEach(::echoScene)

return 0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package inkapplications.shade.cli.scenes

import com.github.ajalt.clikt.output.TermUi
import inkapplications.shade.scenes.structures.Scene
import inkapplications.spondee.scalar.toWholePercentage
import inkapplications.spondee.structure.format

fun echoScene(scene: Scene) {
TermUi.echo("${scene.id}:")
TermUi.echo(" Name: ${scene.metadata.name}")
TermUi.echo(" Group: ${scene.group}")
TermUi.echo(" Speed: ${scene.speed.toWholePercentage().format()}")
TermUi.echo(" Auto Dynamic: ${scene.autoDynamic}")
TermUi.echo(" Actions:")
scene.actions.forEach { action ->
TermUi.echo(" - ${action.target}:")
TermUi.echo(" Power: ${action.action.powerValue}")
TermUi.echo(" Brightness: ${action.action.dimmingValue?.brightness?.toWholePercentage()?.format()}")
TermUi.echo(" Color: ${action.action.colorValue?.color?.toSRGB()?.toHex()}")
TermUi.echo(" Color Temperature: ${action.action.colorTemperatureValue?.temperature?.toKelvin()?.format()}")
TermUi.echo(" Effect: ${action.action.effect}")
TermUi.echo(" Duration: ${action.action.dynamicsDuration}")
}
}
1 change: 1 addition & 0 deletions core/api/core.api
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public final class inkapplications/shade/core/Shade {
public final fun getOnlineDiscovery ()Linkapplications/shade/discover/BridgeDiscovery;
public final fun getResources ()Linkapplications/shade/resources/ResourceControls;
public final fun getRooms ()Linkapplications/shade/rooms/RoomControls;
public final fun getScenes ()Linkapplications/shade/scenes/SceneControls;
public final fun getZones ()Linkapplications/shade/zones/ZoneControls;
}

1 change: 1 addition & 0 deletions core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ kotlin {
api(projects.lights)
api(projects.resources)
api(projects.rooms)
api(projects.scenes)
api(projects.structures)
api(projects.zones)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import inkapplications.shade.internals.InternalsModule
import inkapplications.shade.lights.ShadeLightsModule
import inkapplications.shade.resources.ShadeResourcesModule
import inkapplications.shade.rooms.ShadeRoomsModule
import inkapplications.shade.scenes.ShadeScenesModule
import inkapplications.shade.structures.AuthToken
import inkapplications.shade.structures.HueConfigurationContainer
import inkapplications.shade.structures.InMemoryConfigurationContainer
Expand Down Expand Up @@ -55,4 +56,5 @@ class Shade(
val zones = ShadeZonesModule(internalsModule).zones
val groupedLights = ShadeGroupedLightsModule(internalsModule, eventsModule).groupedLights
val resources = ShadeResourcesModule(internalsModule).resources
val scenes = ShadeScenesModule(internalsModule).scenes
}
9 changes: 9 additions & 0 deletions scenes/api/scenes.api
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
public abstract interface class inkapplications/shade/scenes/SceneControls {
public abstract fun listScenes (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public final class inkapplications/shade/scenes/ShadeScenesModule {
public fun <init> (Linkapplications/shade/internals/InternalsModule;)V
public final fun getScenes ()Linkapplications/shade/scenes/SceneControls;
}

public final class inkapplications/shade/scenes/structures/Scene {
public static final field Companion Linkapplications/shade/scenes/structures/Scene$Companion;
public synthetic fun <init> (ILjava/lang/String;Ljava/lang/String;Ljava/util/List;Linkapplications/shade/scenes/structures/SceneMetadata;Linkapplications/shade/structures/ResourceReference;Linkapplications/spondee/scalar/Percentage;ZLinkapplications/shade/scenes/structures/ScenePalette;Lkotlinx/serialization/internal/SerializationConstructorMarker;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package inkapplications.shade.scenes

import inkapplications.shade.scenes.structures.Scene

/**
* Actions to get and configure Scenes on the Hue system.
*/
interface SceneControls {
/**
* Get a list of all scenes configured on the Hue Bridge.
*
* @return a list of all configured scenes on the Hue bridge.
*/
suspend fun listScenes(): List<Scene>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package inkapplications.shade.scenes

import inkapplications.shade.internals.HueHttpClient
import inkapplications.shade.internals.getData
import inkapplications.shade.scenes.structures.Scene

internal class ShadeScenes(
private val hueClient: HueHttpClient,
): SceneControls {
override suspend fun listScenes(): List<Scene> {
return hueClient.getData("resource", "scene")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package inkapplications.shade.scenes

import inkapplications.shade.internals.InternalsModule

/**
* Provides Access to scene services.
*/
class ShadeScenesModule(
internalsModule: InternalsModule,
) {
val scenes: SceneControls = ShadeScenes(internalsModule.hueHttpClient)
}

0 comments on commit bf5cfc2

Please sign in to comment.