summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2023-01-17 20:07:45 +0100
committerSlávek Banko <slavek.banko@axis.cz>2023-01-18 22:24:25 +0100
commit9be5499101c28522c831605d603bc7a3dcc01edb (patch)
tree6e6d1099f48a12ace9a1fac87a0bfdc57d871cee
parent5f01cbb7f8a9150311188e11279b7592eb284b6b (diff)
downloadamarok-9be54991.tar.gz
amarok-9be54991.zip
Drop python2 support.
Update for PyTQt. Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
-rwxr-xr-xamarok/src/scripts/alarm/alarm.py60
-rwxr-xr-xamarok/src/scripts/amarok_live/amarok_live.py110
-rw-r--r--amarok/src/scripts/common/Zeroconf.py53
-rw-r--r--amarok/src/scripts/playlist2html/Playlist.py2
-rw-r--r--amarok/src/scripts/playlist2html/PlaylistServer.py8
-rw-r--r--amarok/src/scripts/playlist2html/playlist2html.py2
-rwxr-xr-xamarok/src/scripts/templates/python_qt_template.py48
-rw-r--r--amarok/src/scripts/webcontrol/Playlist.py10
-rw-r--r--amarok/src/scripts/webcontrol/RequestHandler.py25
-rwxr-xr-xamarok/src/scripts/webcontrol/WebControl.py123
-rw-r--r--amarok/src/scripts/webcontrol/WebPublisher.py8
11 files changed, 223 insertions, 226 deletions
diff --git a/amarok/src/scripts/alarm/alarm.py b/amarok/src/scripts/alarm/alarm.py
index 97152c73..990d9510 100755
--- a/amarok/src/scripts/alarm/alarm.py
+++ b/amarok/src/scripts/alarm/alarm.py
@@ -4,7 +4,7 @@
# Config dialog for alarm script
# (c) 2005 Mark Kretschmann <markey@web.de>
#
-# Depends on: Python 2.2, PyQt
+# Depends on: Python 3, PyTQt
############################################################################
#
# This program is free software; you can redistribute it and/or modify
@@ -14,42 +14,42 @@
#
############################################################################
-from ConfigParser import *
-import Queue
+from configparser import *
+import queue
import os.path
import sys
import threading
from os import *
try:
- from qt import *
+ from PyTQt.qt import *
except:
- popen( "kdialog --sorry 'PyQt (Qt bindings for Python) is required for this script.'" )
+ popen( "kdialog --sorry 'PyTQt (TQt bindings for Python) is required for this script.'" )
raise
-class ConfigDialog( QDialog ):
+class ConfigDialog( TQDialog ):
def __init__( self ):
- QDialog.__init__( self )
- self.setWFlags( Qt.WDestructiveClose )
+ TQDialog.__init__( self )
+ self.setWFlags( TQt.WDestructiveClose )
self.setCaption( "Alarm Script - Amarok" )
- self.lay = QHBoxLayout( self )
+ self.lay = TQHBoxLayout( self )
- self.vbox = QVBox( self )
+ self.vbox = TQVBox( self )
self.lay.addWidget( self.vbox )
- self.htopbox = QHBox( self.vbox )
- QLabel( "Alarm time: ", self.htopbox )
- self.timeEdit = QTimeEdit( self.htopbox )
+ self.htopbox = TQHBox( self.vbox )
+ TQLabel( "Alarm time: ", self.htopbox )
+ self.timeEdit = TQTimeEdit( self.htopbox )
- self.hbox = QHBox( self.vbox )
+ self.hbox = TQHBox( self.vbox )
- self.ok = QPushButton( self.hbox )
+ self.ok = TQPushButton( self.hbox )
self.ok.setText( "Ok" )
- self.cancel = QPushButton( self.hbox )
+ self.cancel = TQPushButton( self.hbox )
self.cancel.setText( "Cancel" )
self.cancel.setDefault( True )
@@ -59,11 +59,11 @@ class ConfigDialog( QDialog ):
self.adjustSize()
def __del__( self ):
- print "ConfigDialog dtor"
+ print("ConfigDialog dtor")
def save( self ):
wakeTime = str( self.timeEdit.time().toString() )
- print wakeTime
+ print(wakeTime)
self.file = file( "alarmrc", 'w' )
@@ -76,24 +76,24 @@ class ConfigDialog( QDialog ):
self.accept()
-class Alarm( QApplication ):
+class Alarm( TQApplication ):
def __init__( self, args ):
- QApplication.__init__( self, args )
+ TQApplication.__init__( self, args )
- self.queue = Queue.Queue()
+ self.queue = queue.Queue()
self.startTimer( 100 )
self.t = threading.Thread( target = self.readStdin )
self.t.start()
- self.alarmTimer = QTimer()
+ self.alarmTimer = TQTimer()
self.connect( self.alarmTimer, SIGNAL( "timeout()" ), self.wakeup )
self.readSettings()
def __del__( self ):
- print "Alarm dtor"
+ print("Alarm dtor")
def wakeup( self ):
popen( "dcop amarok player play" )
@@ -106,10 +106,10 @@ class Alarm( QApplication ):
try:
timestr = config.get( "General", "alarmtime" )
- print "Alarm Time: " + timestr
+ print("Alarm Time: " + timestr)
- time = QTime.fromString( timestr )
- secondsleft = QTime.currentTime().secsTo( time )
+ time = TQTime.fromString( timestr )
+ secondsleft = TQTime.currentTime().secsTo( time )
if secondsleft > 0:
self.alarmTimer.start( secondsleft * 1000, True )
@@ -137,14 +137,14 @@ class Alarm( QApplication ):
def timerEvent( self, event ):
if not self.queue.empty():
- string = QString( self.queue.get_nowait() )
- print "[Alarm Script] Received notification: " + str( string )
+ eventStr = TQString( self.queue.get_nowait() )
+ print("[Alarm Script] Received notification: " + str( eventStr ))
- if string.contains( "configure" ):
+ if eventStr.contains( "configure" ):
self.configure()
def configure( self ):
- print "Alarm Script: configuration"
+ print("Alarm Script: configuration")
self.dia = ConfigDialog()
self.dia.show()
diff --git a/amarok/src/scripts/amarok_live/amarok_live.py b/amarok/src/scripts/amarok_live/amarok_live.py
index f482b490..cf731369 100755
--- a/amarok/src/scripts/amarok_live/amarok_live.py
+++ b/amarok/src/scripts/amarok_live/amarok_live.py
@@ -7,7 +7,7 @@
#
# (c) 2005 Leo Franchi <lfranchi@gmail.com>
#
-# Depends on: Python 2.2, PyQt
+# Depends on: Python 3, PyTQt
############################################################################
#
# This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
#
############################################################################
-import ConfigParser
+import configparser
import os
import sys
import threading
@@ -25,9 +25,9 @@ import signal
from time import sleep
try:
- from qt import *
+ from TQt.qt import *
except:
- os.popen( "kdialog --sorry 'PyQt (Qt bindings for Python) is required for this script.'" )
+ os.popen( "kdialog --sorry 'PyTQt (TQt bindings for Python) is required for this script.'" )
raise
@@ -35,34 +35,34 @@ except:
debug_prefix = "LiveCD Remastering"
-class ConfigDialog ( QDialog ):
+class ConfigDialog ( TQDialog ):
""" Configuration widget """
def __init__( self ):
- QDialog.__init__( self )
- self.setWFlags( Qt.WDestructiveClose )
+ TQDialog.__init__( self )
+ self.setWFlags( TQt.WDestructiveClose )
self.setCaption("Amarok Live! Configuration")
- self.lay = QGridLayout( self, 3, 2)
+ self.lay = TQGridLayout( self, 3, 2)
self.lay.addColSpacing( 0, 300 )
- self.isopath = QLineEdit( self )
+ self.isopath = TQLineEdit( self )
self.isopath.setText( "Path to Amarok Live! iso" )
- self.tmppath = QLineEdit( self )
+ self.tmppath = TQLineEdit( self )
self.tmppath.setText( "Temporary directory used, 2.5gb free needed" )
self.lay.addWidget( self.isopath, 0, 0 )
self.lay.addWidget( self.tmppath, 1, 0 )
- self.isobutton = QPushButton( self )
+ self.isobutton = TQPushButton( self )
self.isobutton.setText("Browse..." )
- self.tmpbutton = QPushButton( self )
+ self.tmpbutton = TQPushButton( self )
self.tmpbutton.setText("Browse..." )
- self.cancel = QPushButton( self )
+ self.cancel = TQPushButton( self )
self.cancel.setText( "Cancel" )
- self.ok = QPushButton( self )
+ self.ok = TQPushButton( self )
self.ok.setText( "Ok" )
self.lay.addWidget( self.isobutton, 0, 1 )
@@ -82,11 +82,11 @@ class ConfigDialog ( QDialog ):
path = None
try:
- config = ConfigParser.ConfigParser()
+ config = configparser.ConfigParser()
config.read( "remasterrc" )
path = config.get( "General", "path" )
iso = config.get( "General", "iso")
-
+
if not path == "": self.tmppath.setText(path)
if not iso == "": self.isopath.setText(iso)
except:
@@ -97,7 +97,7 @@ class ConfigDialog ( QDialog ):
def save( self ):
""" Saves configuration to file """
self.file = file( "remasterrc", 'w' )
- self.config = ConfigParser.ConfigParser()
+ self.config = configparser.ConfigParser()
self.config.add_section( "General" )
self.config.set( "General", "path", self.tmppath.text() )
self.config.set( "General", "iso", self.isopath.text() )
@@ -109,7 +109,7 @@ class ConfigDialog ( QDialog ):
def clear():
self.file = file( "remasterrc", 'w' )
- self.config = ConfigParser.ConfigParser()
+ self.config = configparser.ConfigParser()
self.config.add_section( "General" )
self.config.set( "General", "path", "" )
self.config.set( "General", "iso", "" )
@@ -118,7 +118,7 @@ class ConfigDialog ( QDialog ):
def browseISO( self ):
- path = QFileDialog.getOpenFileName( "/home",
+ path = TQFileDialog.getOpenFileName( "/home",
"CD Images (*.iso)",
self,
"iso choose dialogr",
@@ -126,8 +126,8 @@ class ConfigDialog ( QDialog ):
self.isopath.setText( path )
def browsePath( self ):
-
- tmp = QFileDialog.getExistingDirectory( "/home",
+
+ tmp = TQFileDialog.getExistingDirectory( "/home",
self,
"get tmp dir",
"Choose working directory",
@@ -147,7 +147,7 @@ class ConfigDialog ( QDialog ):
path, iso = self.readConfig()
os.system("tdesu -t sh %s/amarok.live.remaster.part1.sh %s %s" % (scriptdir, path, iso))
#os.wait()
- print "got path: %s" % path
+ print("got path: %s" % path)
@@ -156,7 +156,7 @@ class ConfigDialog ( QDialog ):
path = ""
iso = ""
try:
- config = ConfigParser.ConfigParser()
+ config = configparser.ConfigParser()
config.read("remasterrc")
path = config.get("General", "path")
iso = config.get("General", "iso")
@@ -166,19 +166,18 @@ class ConfigDialog ( QDialog ):
-class Notification( QCustomEvent ):
- __super_init = QCustomEvent.__init__
+class Notification( TQCustomEvent ):
+ __super_init = TQCustomEvent.__init__
def __init__( self, str ):
-
- self.__super_init(QCustomEvent.User + 1)
- self.string = str
+ self.__super_init(TQCustomEvent.User + 1)
+ self.eventStr = str
-class Remasterer( QApplication ):
- """ The main application, also sets up the Qt event loop """
+class Remasterer( TQApplication ):
+ """ The main application, also sets up the TQt event loop """
def __init__( self, args ):
- QApplication.__init__( self, args )
+ TQApplication.__init__( self, args )
debug( "Started." )
# Start separate thread for reading data from stdin
@@ -187,13 +186,12 @@ class Remasterer( QApplication ):
self.readSettings()
-
# ugly hack, thanks mp8 anyway
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Add playlist to livecd\"")
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Add selected to livecd\"")
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Create Remastered CD\"")
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Clear Music on livecd\"")
-
+
os.system("dcop amarok script addCustomMenuItem \"Amarok live\" \"Add playlist to livecd\"")
os.system("dcop amarok script addCustomMenuItem \"Amarok live\" \"Add selected to livecd\"")
os.system("dcop amarok script addCustomMenuItem \"Amarok live\" \"Create Remastered CD\"")
@@ -234,22 +232,22 @@ class Remasterer( QApplication ):
def customEvent( self, notification ):
""" Handles notifications """
- string = QString(notification.string)
- debug( "Received notification: " + str( string ) )
+ eventStr = TQString(notification.eventStr)
+ debug( "Received notification: " + str( eventStr ) )
- if string.contains( "configure" ):
+ if eventStr.contains( "configure" ):
self.configure()
- if string.contains( "stop"):
+ if eventStr.contains( "stop" ):
self.stop()
- elif string.contains( "customMenuClicked" ):
- if "selected" in string:
- self.copyTrack( string )
- elif "playlist" in string:
+ elif eventStr.contains( "customMenuClicked" ):
+ if eventStr.contains( "selected" ):
+ self.copyTrack( eventStr )
+ elif eventStr.contains( "playlist" ):
self.copyPlaylist()
- elif "Create" in string:
+ elif eventStr.contains( "Create" ):
self.createCD()
- elif "Clear" in string:
+ elif eventStr.contains( "Clear" ):
self.clearCD()
@@ -264,7 +262,7 @@ class Remasterer( QApplication ):
#self.connect( self.dia, SIGNAL( "destroyed()" ), self.readSettings )
def clearCD( self ):
-
+
self.dia = ConfigDialog()
path, iso = self.dia.readConfig()
@@ -274,7 +272,7 @@ class Remasterer( QApplication ):
stop()
def stop( self ):
-
+
fd = open("/tmp/amarok.stop", "w")
fd.write( "stopping")
fd.close()
@@ -297,22 +295,22 @@ class Remasterer( QApplication ):
os.system("dcop amarok playlist saveM3u '%s' false" % tmpfileloc)
tmpfile = open(tmpfileloc)
- import urllib
+ import urllib.request, urllib.parse, urllib.error
files = ""
m3u = ""
for line in tmpfile.readlines():
if line[0] != "#":
-
+
line = line.strip()
# get filename
name = line.split("/")[-1]
- #make url
- url = "file://" + urllib.quote(line)
+ #make url
+ url = "file://" + urllib.parse.quote(line)
- #make path on livecd
+ #make path on livecd
livecdpath = "/music/" + name
files += url + " "
@@ -333,7 +331,7 @@ class Remasterer( QApplication ):
m3uOut.write(m3u)
m3uOut.close()
-
+
os.system("mv /tmp/amarok.live.%s.m3u %s/amarok.live/playlist/" % (suffix,path))
os.system("rm /tmp/amarok.live.%s.m3u" % suffix)
@@ -355,7 +353,7 @@ class Remasterer( QApplication ):
#trying out a new one
#files = event.split(":")[-1][3:-2].replace("\"Amarok live!\" \"add to livecd\" ", "").split("\" \"")
#and another
-
+
files = event.replace("customMenuClicked: Amarok live Add selected to livecd", "").split()
allfiles = ""
@@ -365,7 +363,7 @@ class Remasterer( QApplication ):
os.system("kfmclient copy %s file://%s/amarok.live/music/" % (allfiles, path))
def createCD( self ):
-
+
self.dia = ConfigDialog()
path,iso = self.dia.readConfig()
if path == "":
@@ -394,7 +392,7 @@ def onSignal( signum, stackframe ):
fd.write( "stopping")
fd.close()
- print 'STOPPING'
+ print('STOPPING')
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Add playlist to livecd\"")
os.system("dcop amarok script removeCustomMenuItem \"Amarok live\" \"Add selected to livecd\"")
@@ -405,7 +403,7 @@ def onSignal( signum, stackframe ):
def debug( message ):
""" Prints debug message to stdout """
- print debug_prefix + " " + message
+ print(debug_prefix + " " + message)
def main():
app = Remasterer( sys.argv )
@@ -420,7 +418,7 @@ if __name__ == "__main__":
mainapp = threading.Thread(target=main)
mainapp.start()
signal.signal(15, onSignal)
- print signal.getsignal(15)
+ print(signal.getsignal(15))
while 1: sleep(120)
#main( sys.argv )
diff --git a/amarok/src/scripts/common/Zeroconf.py b/amarok/src/scripts/common/Zeroconf.py
index fa508393..7c790721 100644
--- a/amarok/src/scripts/common/Zeroconf.py
+++ b/amarok/src/scripts/common/Zeroconf.py
@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 USA
-
+
"""
""" patch for meta-service (_services._dns-sd._udp) publishing """
@@ -87,6 +87,7 @@ import socket
import threading
import select
import traceback
+from functools import reduce
__all__ = ["Zeroconf", "ServiceInfo", "ServiceBrowser"]
@@ -103,7 +104,7 @@ _LISTENER_TIME = 200
_BROWSER_TIME = 500
# Some DNS constants
-
+
_MDNS_ADDR = '224.0.0.251'
_MDNS_PORT = 5353;
_DNS_PORT = 53;
@@ -212,7 +213,7 @@ class DNSEntry(object):
"""A DNS entry"""
def __init__(self, name, type, clazz):
- self.key = string.lower(name)
+ self.key = name.lower()
self.name = name
self.type = type
self.clazz = clazz & _CLASS_MASK
@@ -821,7 +822,7 @@ class DNSCache(object):
"""Returns a list of all entries"""
def add(x, y): return x+y
try:
- return reduce(add, self.cache.values())
+ return reduce(add, list(self.cache.values()))
except:
return []
@@ -870,7 +871,7 @@ class Engine(threading.Thread):
def getReaders(self):
result = []
self.condition.acquire()
- result = self.readers.keys()
+ result = list(self.readers.keys())
self.condition.release()
return result
@@ -1008,7 +1009,7 @@ class ServiceBrowser(threading.Thread):
if self.nextTime <= now:
out = DNSOutgoing(_FLAGS_QR_QUERY)
out.addQuestion(DNSQuestion(self.type, _TYPE_PTR, _CLASS_IN))
- for record in self.services.values():
+ for record in list(self.services.values()):
if not record.isExpired(now):
out.addAnswerAtTime(record, now)
self.zeroconf.send(out)
@@ -1335,7 +1336,7 @@ class Zeroconf(object):
changed if needed to make it unique on the network."""
self.checkService(info)
self.services[info.name.lower()] = info
- if self.servicetypes.has_key(info.type):
+ if info.type in self.servicetypes:
self.servicetypes[info.type]+=1
else:
self.servicetypes[info.type]=1
@@ -1387,7 +1388,7 @@ class Zeroconf(object):
def unregisterAllServices(self):
"""Unregister all registered services."""
- print 'Unregistering ',len(self.services),' services'
+ print('Unregistering ',len(self.services),' services')
if len(self.services) > 0:
now = currentTimeMillis()
nextTime = now
@@ -1398,7 +1399,7 @@ class Zeroconf(object):
now = currentTimeMillis()
continue
out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
- for info in self.services.values():
+ for info in list(self.services.values()):
out.addAnswerAtTime(DNSPointer(info.type, _TYPE_PTR, _CLASS_IN, 0, info.name), 0)
out.addAnswerAtTime(DNSService(info.name, _TYPE_SRV, _CLASS_IN, 0, info.priority, info.weight, info.port, info.server), 0)
out.addAnswerAtTime(DNSText(info.name, _TYPE_TXT, _CLASS_IN, 0, info.text), 0)
@@ -1495,11 +1496,11 @@ class Zeroconf(object):
for question in msg.questions:
if question.type == _TYPE_PTR:
if question.name == "_services._dns-sd._udp.local.":
- for stype in self.servicetypes.keys():
+ for stype in list(self.servicetypes.keys()):
if out is None:
out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
out.addAnswer(msg, DNSPointer("_services._dns-sd._udp.local.", _TYPE_PTR, _CLASS_IN, _DNS_TTL, stype))
- for service in self.services.values():
+ for service in list(self.services.values()):
if question.name == service.type:
if out is None:
out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
@@ -1511,7 +1512,7 @@ class Zeroconf(object):
# Answer A record queries for any service addresses we know
if question.type == _TYPE_A or question.type == _TYPE_ANY:
- for service in self.services.values():
+ for service in list(self.services.values()):
if service.server == question.name.lower():
out.addAnswer(msg, DNSAddress(question.name, _TYPE_A, _CLASS_IN | _CLASS_UNIQUE, _DNS_TTL, service.address))
@@ -1544,10 +1545,10 @@ class Zeroconf(object):
def close(self):
"""Ends the background threads, and prevent this instance from
servicing further queries."""
- print 'in close'
+ print('in close')
if globals()['_GLOBAL_DONE'] == 0:
globals()['_GLOBAL_DONE'] = 1
- print 'closing globals'
+ print('closing globals')
self.notifyAll()
self.engine.notify()
self.unregisterAllServices()
@@ -1558,21 +1559,21 @@ class Zeroconf(object):
# query (for Zoe), and service unregistration.
if __name__ == '__main__':
- print "Multicast DNS Service Discovery for Python, version", __version__
+ print("Multicast DNS Service Discovery for Python, version", __version__)
r = Zeroconf()
- print "1. Testing registration of a service..."
+ print("1. Testing registration of a service...")
desc = {'version':'0.10','a':'test value', 'b':'another value'}
info = ServiceInfo("_http._tcp.local.", "My Service Name._http._tcp.local.", socket.inet_aton("127.0.0.1"), 1234, 0, 0, desc)
- print " Registering service..."
+ print(" Registering service...")
r.registerService(info)
- print " Registration done."
- print "2. Testing query of service information..."
- print " Getting ZOE service:", str(r.getServiceInfo("_http._tcp.local.", "ZOE._http._tcp.local."))
- print " Query done."
- print "3. Testing query of own service..."
- print " Getting self:", str(r.getServiceInfo("_http._tcp.local.", "My Service Name._http._tcp.local."))
- print " Query done."
- print "4. Testing unregister of service information..."
+ print(" Registration done.")
+ print("2. Testing query of service information...")
+ print(" Getting ZOE service:", str(r.getServiceInfo("_http._tcp.local.", "ZOE._http._tcp.local.")))
+ print(" Query done.")
+ print("3. Testing query of own service...")
+ print(" Getting self:", str(r.getServiceInfo("_http._tcp.local.", "My Service Name._http._tcp.local.")))
+ print(" Query done.")
+ print("4. Testing unregister of service information...")
r.unregisterService(info)
- print " Unregister done."
+ print(" Unregister done.")
r.close()
diff --git a/amarok/src/scripts/playlist2html/Playlist.py b/amarok/src/scripts/playlist2html/Playlist.py
index e91f2944..91d6c971 100644
--- a/amarok/src/scripts/playlist2html/Playlist.py
+++ b/amarok/src/scripts/playlist2html/Playlist.py
@@ -16,7 +16,7 @@ class Track(object):
__Q_SLOTS__ = FIELDS
def __init__(self, **kwargs):
- for key,value in kwargs.iteritems():
+ for key,value in kwargs.items():
setattr(self, key, value)
diff --git a/amarok/src/scripts/playlist2html/PlaylistServer.py b/amarok/src/scripts/playlist2html/PlaylistServer.py
index 8fb2d640..6d259fa9 100644
--- a/amarok/src/scripts/playlist2html/PlaylistServer.py
+++ b/amarok/src/scripts/playlist2html/PlaylistServer.py
@@ -9,8 +9,8 @@
License: GPL
"""
-import SimpleHTTPServer
-import BaseHTTPServer
+import http.server
+import http.server
from Playlist import Playlist
# the port number to listen to
@@ -19,7 +19,7 @@ PORT = 4773
PLIST = None
-class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+class RequestHandler(http.server.SimpleHTTPRequestHandler):
"""We need our own 'RequestHandler, to handle the requests, that arrive at
our server."""
@@ -35,7 +35,7 @@ def main():
"""main is the starting-point for our script."""
global PLIST
PLIST = Playlist()
- srv = BaseHTTPServer.HTTPServer(('',PORT),RequestHandler)
+ srv = http.server.HTTPServer(('',PORT),RequestHandler)
srv.serve_forever()
diff --git a/amarok/src/scripts/playlist2html/playlist2html.py b/amarok/src/scripts/playlist2html/playlist2html.py
index 1b868f07..e5531d81 100644
--- a/amarok/src/scripts/playlist2html/playlist2html.py
+++ b/amarok/src/scripts/playlist2html/playlist2html.py
@@ -10,7 +10,7 @@ def main():
stdin = os.popen("kdialog --getsaveurl %s"%(user.home))
dest = stdin.readline().strip()[5:]
plist = Playlist()
- print dest
+ print(dest)
try:
f = open(dest, "w")
f.write(plist.toHtml())
diff --git a/amarok/src/scripts/templates/python_qt_template.py b/amarok/src/scripts/templates/python_qt_template.py
index e5639e8b..c1bb4420 100755
--- a/amarok/src/scripts/templates/python_qt_template.py
+++ b/amarok/src/scripts/templates/python_qt_template.py
@@ -4,7 +4,7 @@
# Python-Qt template script for Amarok
# (c) 2005 Mark Kretschmann <markey@web.de>
#
-# Depends on: Python 2.2, PyQt
+# Depends on: Python 3, PyTQt
############################################################################
#
# This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
#
############################################################################
-import ConfigParser
+import configparser
import os
import sys
import threading
@@ -22,9 +22,9 @@ import signal
from time import sleep
try:
- from qt import *
+ from PyTQt.qt import *
except:
- os.popen( "kdialog --sorry 'PyQt (Qt bindings for Python) is required for this script.'" )
+ os.popen( "kdialog --sorry 'PyTQt (TQt bindings for Python) is required for this script.'" )
raise
@@ -36,13 +36,13 @@ class ConfigDialog( QDialog ):
""" Configuration widget """
def __init__( self ):
- QDialog.__init__( self )
- self.setWFlags( Qt.WDestructiveClose )
+ TQDialog.__init__( self )
+ self.setWFlags( TQt.WDestructiveClose )
self.setCaption( "Test Script - Amarok" )
foo = None
try:
- config = ConfigParser.ConfigParser()
+ config = configparser.ConfigParser()
config.read( "testrc" )
foo = config.get( "General", "foo" )
except:
@@ -55,7 +55,7 @@ class ConfigDialog( QDialog ):
self.file = file( "testrc", 'w' )
- self.config = ConfigParser.ConfigParser()
+ self.config = configparser.ConfigParser()
self.config.add_section( "General" )
self.config.set( "General", "foo", foovar )
self.config.write( self.file )
@@ -64,17 +64,17 @@ class ConfigDialog( QDialog ):
self.accept()
-class Notification( QCustomEvent ):
- __super_init = QCustomEvent.__init__
+class Notification( TQCustomEvent ):
+ __super_init = TQCustomEvent.__init__
def __init__( self, str ):
- self.__super_init(QCustomEvent.User + 1)
- self.string = str
+ self.__super_init(TQCustomEvent.User + 1)
+ self.eventStr = str
-class Test( QApplication ):
- """ The main application, also sets up the Qt event loop """
+class Test( TQApplication ):
+ """ The main application, also sets up the TQt event loop """
def __init__( self, args ):
- QApplication.__init__( self, args )
+ TQApplication.__init__( self, args )
debug( "Started." )
# Start separate thread for reading data from stdin
@@ -117,25 +117,25 @@ class Test( QApplication ):
def customEvent( self, notification ):
""" Handles notifications """
- string = QString(notification.string)
- debug( "Received notification: " + str( string ) )
+ eventStr = TQString(notification.eventStr)
+ debug( "Received notification: " + str( eventStr ) )
- if string.contains( "configure" ):
+ if eventStr.contains( "configure" ):
self.configure()
- if string.contains( "engineStateChange: play" ):
+ if eventStr.contains( "engineStateChange: play" ):
self.engineStatePlay()
- if string.contains( "engineStateChange: idle" ):
+ if eventStr.contains( "engineStateChange: idle" ):
self.engineStateIdle()
- if string.contains( "engineStateChange: pause" ):
+ if eventStr.contains( "engineStateChange: pause" ):
self.engineStatePause()
- if string.contains( "engineStateChange: empty" ):
+ if eventStr.contains( "engineStateChange: empty" ):
self.engineStatePause()
- if string.contains( "trackChange" ):
+ if eventStr.contains( "trackChange" ):
self.trackChange()
# Notification callbacks. Implement these functions to react to specific notification
@@ -174,7 +174,7 @@ class Test( QApplication ):
def debug( message ):
""" Prints debug message to stdout """
- print debug_prefix + " " + message
+ print(debug_prefix + " " + message)
def main( ):
app = Test( sys.argv )
diff --git a/amarok/src/scripts/webcontrol/Playlist.py b/amarok/src/scripts/webcontrol/Playlist.py
index e2d888c6..a049abab 100644
--- a/amarok/src/scripts/webcontrol/Playlist.py
+++ b/amarok/src/scripts/webcontrol/Playlist.py
@@ -30,7 +30,7 @@ class Track(object):
max_field_value_lengths = [(0,"")] * len(FIELDS)
def __init__(self, **kwargs):
- for key,value in kwargs.iteritems():
+ for key,value in kwargs.items():
setattr(self, key, value)
@@ -53,14 +53,14 @@ class Track(object):
index = 0
# for f in self.__Q_SLOTS__ :
-# print string.strip(f)
+# print f.strip()
for i in [getattr(self,f) for f in self.__Q_SLOTS__ ]:
- if len(string.strip(i)) > Track.max_field_value_lengths[index][0]:
- Track.max_field_value_lengths[index] = (len(string.strip(i)),i)
+ if len(i.strip()) > Track.max_field_value_lengths[index][0]:
+ Track.max_field_value_lengths[index] = (len(i.strip()),i)
index += 1
- tr_style = ''
+ tr_style = ''
tr_id = ''
if style:
diff --git a/amarok/src/scripts/webcontrol/RequestHandler.py b/amarok/src/scripts/webcontrol/RequestHandler.py
index 8519ef35..2d0b2cb3 100644
--- a/amarok/src/scripts/webcontrol/RequestHandler.py
+++ b/amarok/src/scripts/webcontrol/RequestHandler.py
@@ -11,8 +11,8 @@
License: GPL
"""
-import SimpleHTTPServer
-import BaseHTTPServer
+import http.server
+import http.server
from Playlist import Playlist
import Globals
@@ -63,8 +63,7 @@ class AmarokStatus:
if self.playState != -1:
res = self.playState == self.EnginePlay
else:
- res = string.find(self.dcop_isplaying.result(), "true") >= 0
- if res:
+ if "true" in self.dcop_isplaying.result():
self.playState = self.EnginePlay
else:
self.playState = self.EnginePause
@@ -85,7 +84,7 @@ class AmarokStatus:
def controlsEnabled(self):
return self.allowControl
-class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+class RequestHandler(http.server.SimpleHTTPRequestHandler):
"""We need our own 'RequestHandler, to handle the requests, that arrive at
our server."""
@@ -144,10 +143,10 @@ class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
# abort a request that has already been completed
# probably a refresh from the users browser
- if qmap.has_key("reqid") and req_id == int(qmap["reqid"]):
+ if "reqid" in qmap and req_id == int(qmap["reqid"]):
return 0
- if qmap.has_key("action"):
+ if "action" in qmap:
a = qmap["action"]
if a == "stop":
self._amarokStop()
@@ -193,9 +192,9 @@ class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
# get the sessions last reqid
last_req_id = 0
session_id = None
- if qmap.has_key("sesid"):
+ if "sesid" in qmap:
session_id = qmap["sesid"]
- if REQ_IDS.has_key(session_id):
+ if session_id in REQ_IDS:
last_req_id = REQ_IDS[session_id]
else:
REQ_IDS[session_id] = last_req_id
@@ -229,15 +228,15 @@ class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
# Surely there must be a better way that this:)
#
self.send_response(200)
- if string.find(self.path, ".png") >= 0:
+ if ".png" in self.path:
self.send_header("content-type","image/png")
self.end_headers()
self._sendFile(self.path)
- elif string.find(self.path, ".js") >= 0:
+ elif ".js" in self.path:
self.send_header("content-type","text/plain")
self.end_headers()
self._sendFile(self.path)
- elif string.find(self.path, ".css") >= 0:
+ elif ".css" in self.path:
self.send_header("content-type","text/css")
self.end_headers()
self._sendFile(self.path)
@@ -257,7 +256,7 @@ def main():
"""main is the starting-point for our script."""
global PLIST
PLIST = Playlist()
- srv = BaseHTTPServer.HTTPServer(('',Globals.PORT),RequestHandler)
+ srv = http.server.HTTPServer(('',Globals.PORT),RequestHandler)
srv.serve_forever()
diff --git a/amarok/src/scripts/webcontrol/WebControl.py b/amarok/src/scripts/webcontrol/WebControl.py
index e172a157..03f97e7f 100755
--- a/amarok/src/scripts/webcontrol/WebControl.py
+++ b/amarok/src/scripts/webcontrol/WebControl.py
@@ -4,11 +4,11 @@
# (c) 2005 Jonas Drewsen <kde@xspect.dk>
# (c) 2006 Peter C. Ndikuwera <pndiku@gmail.com>
#
-# Depends on: Python 2.2, PyQt
+# Depends on: Python 3, PyTQt
#
############################################################################
# Based on
-# Python-Qt template script for Amarok
+# PyTQt template script for Amarok
# (c) 2005 Mark Kretschmann <markey@web.de>
#
############################################################################
@@ -20,7 +20,7 @@
#
############################################################################
-import ConfigParser
+import configparser
import os
import sys
import socket
@@ -31,7 +31,7 @@ from time import sleep
import Globals
from Playlist import Playlist
import RequestHandler
-import BaseHTTPServer
+import http.server
from WebPublisher import *
import time
@@ -40,9 +40,9 @@ import time
import string
try:
- from qt import *
+ from PyTQt.qt import *
except:
- os.popen( "kdialog --sorry 'PyQt (Qt bindings for Python) is required for this script.'" )
+ os.popen( "kdialog --sorry 'PyTQt (TQt bindings for Python) is required for this script.'" )
raise
@@ -50,47 +50,47 @@ except:
debug_prefix = "[WebControl Script]"
-class ConfigDialog( QDialog ):
+class ConfigDialog( TQDialog ):
""" Configuration widget """
def __init__( self ):
- QDialog.__init__( self )
- self.setWFlags( Qt.WDestructiveClose )
+ TQDialog.__init__( self )
+ self.setWFlags( TQt.WDestructiveClose )
self.setCaption( "WebControl - Amarok" )
- self.config = ConfigParser.ConfigParser()
+ self.config = configparser.ConfigParser()
allowControl = RequestHandler.AmarokStatus.allowControl
- publish = RequestHandler.AmarokStatus.publish
+ publish = RequestHandler.AmarokStatus.publish
try:
- config = ConfigParser.ConfigParser()
+ config = configparser.ConfigParser()
config.read( "webcontrolrc" )
- allowControl = string.find(config.get( "General", "allowcontrol" ), "True") >= 0
- publish = string.find(config.get( "General", "publish" ), "True") >= 0
+ allowControl = "True" in config.get( "General", "allowcontrol" )
+ publish = "True" in config.get( "General", "publish" )
except:
pass
- self.lay = QHBoxLayout( self )
+ self.lay = TQHBoxLayout( self )
- self.vbox = QVBox( self )
+ self.vbox = TQVBox( self )
self.lay.addWidget( self.vbox )
- self.hbox1 = QHBox( self.vbox )
+ self.hbox1 = TQHBox( self.vbox )
- self.allowControl = QCheckBox( QString("Allow control"), self.hbox1 )
+ self.allowControl = TQCheckBox( TQString("Allow control"), self.hbox1 )
self.allowControl.setChecked(allowControl)
- self.hbox1 = QHBox( self.vbox )
+ self.hbox1 = TQHBox( self.vbox )
- self.publish = QCheckBox( QString("Publish"), self.hbox1 )
+ self.publish = TQCheckBox( TQString("Publish"), self.hbox1 )
self.publish.setChecked(publish)
- self.hbox = QHBox( self.vbox )
+ self.hbox = TQHBox( self.vbox )
- self.ok = QPushButton( self.hbox )
+ self.ok = TQPushButton( self.hbox )
self.ok.setText( "Ok" )
- self.cancel = QPushButton( self.hbox )
+ self.cancel = TQPushButton( self.hbox )
self.cancel.setText( "Cancel" )
self.cancel.setDefault( True )
@@ -104,7 +104,7 @@ class ConfigDialog( QDialog ):
self.file = file( "webcontrolrc", 'w' )
- self.config = ConfigParser.ConfigParser()
+ self.config = configparser.ConfigParser()
self.config.add_section( "General" )
self.config.set( "General", "allowcontrol", self.allowControl.isChecked() )
self.config.set( "General", "publish", self.publish.isChecked() )
@@ -114,17 +114,17 @@ class ConfigDialog( QDialog ):
self.accept()
-class Notification( QCustomEvent ):
- __super_init = QCustomEvent.__init__
+class Notification( TQCustomEvent ):
+ __super_init = TQCustomEvent.__init__
def __init__( self, str ):
- self.__super_init(QCustomEvent.User + 1)
- self.string = str
+ self.__super_init(TQCustomEvent.User + 1)
+ self.eventStr = str
-class WebControl( QApplication ):
- """ The main application, also sets up the Qt event loop """
+class WebControl( TQApplication ):
+ """ The main application, also sets up the TQt event loop """
def __init__( self, args ):
- QApplication.__init__( self, args )
+ TQApplication.__init__( self, args )
debug( "Started." )
self.readSettings()
@@ -138,15 +138,15 @@ class WebControl( QApplication ):
while p_incr < 10:
try:
- p_i=p_incr+Globals.PORT
- self.srv = BaseHTTPServer.HTTPServer(('',p_i),RequestHandler.RequestHandler)
- publisher.port = p_i
- break
- except socket.error:
- p_incr+=1
-
+ p_i=p_incr+Globals.PORT
+ self.srv = http.server.HTTPServer(('',p_i),RequestHandler.RequestHandler)
+ publisher.port = p_i
+ break
+ except socket.error:
+ p_incr+=1
+
self.zeroconfPublishing()
- self.snsrv = QSocketNotifier(self.srv.fileno(), QSocketNotifier.Read)
+ self.snsrv = TQSocketNotifier(self.srv.fileno(), TQSocketNotifier.Read)
self.snsrv.connect( self.snsrv, SIGNAL('activated(int)'), self.readSocket )
def readSocket( self ):
@@ -155,15 +155,15 @@ class WebControl( QApplication ):
def readSettings( self ):
""" Reads settings from configuration file """
- config = ConfigParser.ConfigParser()
+ config = configparser.ConfigParser()
config.read( "webcontrolrc" )
try:
- RequestHandler.AmarokStatus.allowControl = string.find(config.get( "General", "allowcontrol" ), "True") >= 0
- RequestHandler.AmarokStatus.publish = string.find(config.get( "General", "publish" ), "True") >= 0
+ RequestHandler.AmarokStatus.allowControl = "True" in config.get( "General", "allowcontrol" )
+ RequestHandler.AmarokStatus.publish = "True" in config.get( "General", "publish" )
except:
debug( "No config file found, using defaults." )
-
+
def postConfigure( self ):
self.readSettings()
@@ -195,32 +195,32 @@ class WebControl( QApplication ):
def customEvent( self, notification ):
""" Handles the notifications """
- string = QString(notification.string)
- debug( "Received notification: " + str( string ) )
+ eventStr = TQString(notification.eventStr)
+ debug( "Received notification: " + str( eventStr ) )
- if string.contains( "configure" ):
+ if eventStr.contains( "configure" ):
self.configure()
- elif string.contains( "exit" ):
+ elif eventStr.contains( "exit" ):
cleanup(None,None)
- elif string.contains( "engineStateChange: play" ):
+ elif eventStr.contains( "engineStateChange: play" ):
self.engineStatePlay()
- elif string.contains( "engineStateChange: idle" ):
+ elif eventStr.contains( "engineStateChange: idle" ):
self.engineStateIdle()
- elif string.contains( "engineStateChange: pause" ):
+ elif eventStr.contains( "engineStateChange: pause" ):
self.engineStatePause()
- elif string.contains( "engineStateChange: empty" ):
+ elif eventStr.contains( "engineStateChange: empty" ):
self.engineStatePause()
- elif string.contains( "trackChange" ):
+ elif eventStr.contains( "trackChange" ):
self.trackChange()
else:
- debug( "Unknown notification: " + str(string) + " -> ignoring")
+ debug( "Unknown notification: " + str(eventStr) + " -> ignoring")
# Notification callbacks. Implement these functions to react to specific notification
# events from Amarok:
@@ -260,7 +260,6 @@ class WebControl( QApplication ):
RequestHandler.AmarokStatus.dcop_trackcurrenttime.result()
RequestHandler.AmarokStatus.dcop_tracktotaltime = Globals.PlayerDcop("trackTotalTime")
RequestHandler.AmarokStatus.dcop_tracktotaltime.result()
-
@@ -269,21 +268,21 @@ class WebControl( QApplication ):
def debug( message ):
""" Prints debug message to stdout """
- print debug_prefix + " " + message
+ print(debug_prefix + " " + message)
def cleanup(sig,frame):
publisher.shutdown()
- os._exit(0)
+ os._exit(0)
def guithread():
- app = WebControl( sys.argv )
- app.exec_loop()
+ app = WebControl( sys.argv )
+ app.exec_loop()
if __name__ == "__main__":
Globals.EXEC_PATH = os.path.abspath(sys.path[0])
- gui = threading.Thread(target=guithread)
- gui.start()
- signal.signal(signal.SIGTERM,cleanup)
+ gui = threading.Thread(target=guithread)
+ gui.start()
+ signal.signal(signal.SIGTERM,cleanup)
# just wait quietly for the end
- while 1: sleep(120)
+ while 1: sleep(120)
diff --git a/amarok/src/scripts/webcontrol/WebPublisher.py b/amarok/src/scripts/webcontrol/WebPublisher.py
index 2cb649de..38eadc08 100644
--- a/amarok/src/scripts/webcontrol/WebPublisher.py
+++ b/amarok/src/scripts/webcontrol/WebPublisher.py
@@ -20,15 +20,15 @@ import string
temp=sys.path[:]
sys.path.insert(0,os.path.abspath(os.path.dirname(sys.argv[0])+'/../common'))
if not os.getenv("TDEDIR") is None: sys.path.insert(0,os.getenv("TDEDIR")+"/share/apps/amarok/scripts/common")
-if not os.getenv("TDEDIRS") is None: sys.path=[p+"/share/apps/amarok/scripts/common" for p in string.split(os.getenv("TDEDIRS"),os.pathsep)]+sys.path
+if not os.getenv("TDEDIRS") is None: sys.path=[p+"/share/apps/amarok/scripts/common" for p in os.pathsep.split(os.getenv("TDEDIRS"))]+sys.path
from Publisher import *
sys.path=temp
class WebPublisher(Publisher):
-
+
port = None
def services(self):
return [{ "name" : "Amarok WebControl for "+getpass.getuser(), "port": self.port, "type": "_http._tcp", "properties": {}}]
-
-publisher = WebPublisher() \ No newline at end of file
+
+publisher = WebPublisher()