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

Antwort per Email an