You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/scripts/templates/amarok.rb

86 lines
3.2 KiB

############################################################################
# Copyright (C) 2005 by Ian Monroe #
# ian@monroe.nu #
# #
# This program is free software; you can redistribute it and#or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program; if not, write to the #
# Free Software Foundation, Inc., #
# 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. #
############################################################################
class QtIoListener < Qt::Object
Q_SLOTS 'dataRecieved()'
def initialize(app, iostream, lineHandler)
super(app)
@lineHandler = lineHandler
@iostream = iostream
streamListener = Qt::SocketNotifier.new(iostream.fileno, Qt::SocketNotifier.Read, app, 'stdinWatcher')
Qt::Object.connect(streamListener, SIGNAL("activated(int)"), self, SLOT("dataRecieved()") )
end
def dataRecieved
line = @iostream.gets
line.chomp!
@lineHandler.call(line)
end
end
class AmaroKLib
#Either way, AmaroKLib depends of QtRuby by virtue of using the QtIoListener.
#Making a non-Qt alternative to QtIoListener shouldn't be too difficult,
#you'll just have to get your hands dirty with threads and then modify the definition of
#@listen in this class. And send me the class for inclusion in this template. :)
def initialize(app, commandSlots)
@listener = QtIoListener.new(app, STDIN, Proc.new { |line|
#puts "Recieved command #{line}"
case line
when 'configure' then commandSlots.configure
when 'trackChange' then commandSlots.trackChange
when 'engineStateChange: empty' then commandSlots.stateChange_empty
when 'engineStateChange: idle' then commandSlots.stateChange_idle
when 'engineStateChange: paused' then commandSlots.stateChange_paused
when 'engineStateChange: playing' then commandSlots.stateChange_playing
#not a command given by Amarok, helpful when debugging
when 'exit' then commandSlots.exit
else $stderr.print "Illegal command: #{line}"
end
} )
end
end
#make your own child class of AmaroKSlots to send to AmaroKLib.
class AmaroKSlots
def configure
nil
end
def stateChange_empty
nil
end
def stateChange_idle
nil
end
def stateChange_paused
nil
end
def stateChange_playing
nil
end
def trackChange
nil
end
#not a command given by Amarok, used when debugging
def exit
nil
end
end