Hallo!
Ich versuche mich in das Thema Plugins/Applets einzuarbeiten...habe aber
einige Startschwierigkeiten. Könnte mir dabei bitte jemand ein paar Tips
geben?
Mein Ziel ist es ein Applet zu haben, das über ein cli-Kommando einen
der vorhandenen Tastensounds bzw. einen eigenen wav-Sound wiedergibt.
Zunächst das Plugin. Es soll zunächst eigentlich nichts weiter machen
als mir einen Cli-Kommand zu geben:
(Ich habe mir das alles versucht mit Google und den bereits vorhandenen
Applets irgendwie zusammenzuklauben)
Code:
--------------------
use strict;
###########################################
### Section 1. Change these as required ###
###########################################
package Plugins::PlayOwnSoundCliHelper;
use Slim::Player::Playlist;
use Slim::Utils::Strings qw (string);
sub getDisplayName {
return 'PLUGIN_PlayOwnSoundCliHelper'
};
sub strings { return '
PLUGIN_PlayOwnSoundCliHelper
EN PlayOwnSoundCliHelper
'};
my $log = Slim::Utils::Log->addLogCategory({
'category' => 'plugin.AllQuiet',
'defaultLevel' => 'WARN',
# 'defaultLevel' => 'DEBUG',
# 'description' => getDisplayName(),
});
##################################################
### Section 2. Your variables and code go here ###
##################################################
sub setMode {
$log->warn("setMode\n");
my $client = shift;
$client->lines(\&lines);
}
sub enabled {
$log->warn("enabled\n");
my $client = shift;
#return !Slim::Music::iTunes::useiTunesLibrary();
}
my %functions = (
);
sub lines {
$log->warn("lines\n");
my $client = shift;
}
sub initPlugin {
$log->warn("initPlugin\n");
Slim::Control::Request::addDispatch(['playownsound'], [0, 1, 0, undef]);
}
################################################
### End of Section 2. ###
################################################
sub getFunctions {
return \%functions;
}
1;
--------------------
1.) Ich habe keine Ahnung warum, aber die Debug-Ausgaben werden gar
nicht geschrieben? Das Plugin scheint aber ausgeführt zu werden. Wenn
ich in einer Linie müll schreibe, erhalte ich auch eine Menge
Fehlermeldungen. Habe ich etwas übersehen?
2.)Mit der Zeile: "Slim::Control::Request::addDispatch(['playownsound'],
[0, 1, 0, undef]);" registriere ich das cli Kommando.(?) Wenn ich es
richtig verstanden habe, ist am Ende "undef", da ich keine Pozedur in
dem Plugin starte. Was bedeuten denn die 0,1,0 ?
Dann das Applet, was die Befehle verarbeiten soll:
Meta:
Code:
--------------------
local oo = require("loop.simple")
local AppletMeta = require("jive.AppletMeta")
local appletManager = appletManager
local jiveMain = jiveMain
module(...)
oo.class(_M, AppletMeta)
function jiveVersion(meta)
return 1, 1
end
function defaultSettings(meta)
return {
currentSetting = 0,
}
end
function registerApplet(meta)
jiveMain:addItem(meta:menuItem('PlayOwnSoundCliApplet', 'home',
"PlayOwnSoundCli", function(applet, ...) applet:menu(...) end, 20))
end
function configureApplet(self)
local PlayOwnSoundCli = appletManager:loadApplet("PlayOwnSoundCli")
PlayOwnSoundCli:startPlayOwnSoundCli()
end
--------------------
Applet:
Code:
--------------------
--[[
=head1 NAME
applets.PlayOwnSoundCli.PlayOwnSoundCliApplet - PlayOwnSoundCli Applet
=head1 DESCRIPTION
...
=head1 FUNCTIONS
Applet related methods are described in L<jive.Applet>.
=cut
--]]
-- stuff we use
local tostring = tostring
local tonumber = tonumber
local oo = require("loop.simple")
local string = require("string")
local Applet = require("jive.Applet")
local RadioButton = require("jive.ui.RadioButton")
local RadioGroup = require("jive.ui.RadioGroup")
local Window = require("jive.ui.Window")
local Popup = require("jive.ui.Popup")
local Textarea = require('jive.ui.Textarea')
local SimpleMenu = require("jive.ui.SimpleMenu")
local Framework = require("jive.ui.Framework")
local appletManager = appletManager
local Group = require("jive.ui.Group")
local SocketTcp = require("jive.net.SocketTcp")
local Timer = require("jive.ui.Timer")
local lfs = require("lfs")
local System = require("jive.System")
local os = require("os")
local io = require("io")
local SlimServer = require("jive.slim.SlimServer")
module(...)
oo.class(_M, Applet)
function init(self)
log:info("Init PlayOwnSoundCli")
log:info("Init Beendet.")
end
function ProcessCli(self, cmd)
Framework:playSound("DOCKING")
log:info("Processing CLI")
log:info(cmd)
self:warnMasses(cmd)
end
function startPlayOwnSoundCli(self)
log:info("startPlayOwnSoundCli")
local player = appletManager:callService("getCurrentPlayer")
log:info(player)
local cmd = { 'playownsound' }
player:subscribe(
--'/slim/playownsound/' .. player:getId(),
'/slim/playownsound/',
function(chunk)
log:warn("*** GOT playownsound")
Framework:playSound("DOCKING")
self:warnMasses("huhu")
log:info("Processing CLI")
end,
player:getId(),
cmd
)
end
function warnMasses(self, warning)
log:info(self:string(warning))
-- create a Popup object, using already established 'toast_popup_text' skin
style
local PlayOwnSoundCli = Popup('toast_popup_text')
-- add message to popup
local PlayOwnSoundCliMessage = Group("group", {
text = Textarea('toast_popup_textarea',self:string(warning)),
})
PlayOwnSoundCli:addWidget(PlayOwnSoundCliMessage)
-- display the message for 3 seconds
PlayOwnSoundCli:showBriefly(3000, nil, Window.transitionPushPopupUp,
Window.transitionPushPopupDown)
end
function menu(self, menuItem)
log:warn("menu")
local group = RadioGroup()
local currentSetting = self:getSettings().currentSetting
local soundliste = {"BUMP", "CLICK", "JUMP", "WINDOWSHOW",
"WINDOWHIDE", "SELECT", "PLAYBACK", "DOCKING", "STARTUP", "SHUTDOWN"}
-- create a SimpleMenu object with selections to be created
local menu = SimpleMenu("menu")
--Die Sounddateien einfügen:
local wavDir
wavDir =
string.match(System:findFile("applets/PlayOwnSoundCli/sounds/empty"),
"(.*)empty")
for file in lfs.dir(wavDir) do
if file ~= "." then
if file ~= ".." then
if file ~= "empty" then
menu:addItem({
text = self:string(file),
sound = nil,
callback = function()
Framework:loadSound(file, wavDir .. file, soundport)
Framework:playSound(file)
end,
})
end
end
end
end
--window:setAutoHide(true)
for i = 1, #soundliste do
menu:addItem({
text = self:string(soundliste[i]),
sound = nil,
callback = function()
Framework:playSound(soundliste[i])
end,
})
end
-- create a window object
local window = Window("window", self:string("PlayOwnSoundCli"))
-- add the SimpleMenu to the window
window:addWidget(menu)
-- show the window
window:show()
end
--------------------
So stürzt es derzeit schon beim Start ab. Das Problem ist die Zeile:
local player = appletManager:callService("getCurrentPlayer")
Das scheint hier nicht zu klappen. Wenn ich das ganze aufrufe in der
Funktion "function menu(self, menuItem)" scheint es kein Problem zu
geben. Aber ich könnte mein Cli-Kommando erst empfangen, wenn ich das
Menü einmal aufgerufen habe...
Das Menü als solches (function menu) geht. Es werden alle einträge
angezeigt und bei tastendruck auch die Sounds abgespielt.
Allerdings ist es mir noch nicht gelungen bei meinen vielen tausend
tests (ja...leider stochere ich nur ziemlich viel herum...) jemals ein
cli-Kommando zu empfangen.
Derzeit ist es ja auch recht schwierig sich durch die Wiki zu
kämpfen...da sie Offline ist...ich denke ich habe aber das meiste über
den Google-Cache finden können...
Kann mich hier jemand unterstützen? Gerade der Anfang ist doch recht
schwierig...
Gruß
Blondie
------------------------------------------------------------------------
Blondie's Profile: http://forums.slimdevices.com/member.php?userid=50288
View this thread: http://forums.slimdevices.com/showthread.php?t=100427
_______________________________________________
slimserver-de mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/slimserver-de