Der rhythmbox-Banshee-Import Skript migriert Spiel zählt und Bewertungen . Vielen Dank an @xiphosurus. Damit das Skript funktioniert, müssen Sie ihm jedoch mitteilen, wo sich die Banshee- und Rhythmbox-Datenbanken befinden.
Skript vorbereiten
Suchen Sie Ihre Rhythmbox- und Banshee-Datenbankdateien. Die Standardspeicherorte sind:
/home/YOUR_USERNAME/.local/share/rhythmbox/rhythmdb.xml
/home/YOUR_USERNAME/.config/banshee-1/banshee.db
Sichern Sie sie! Ich werde das noch einmal sagen. Erstelle eine Sicherung.
Kopieren Sie nun die Datei banshee.db in denselben Ordner wie das Skript rhythmbox-banshee-import. Und ändern Sie dann das Skript rhythmbox-banshee-import, in dem die Zeile lautet:
RB_DB = 'rhythmdb.xml'
Fügen Sie den Pfad / zu / Ihrer / rhythmboxdb.xml-Datei ein, zB:
RB_DB = '/home/YOUR_USERNAME/.local/share/rhythmbox/rhythmdb.xml'
Führen Sie nun das Skript aus und alle Wiedergabezahlen und Wiedergabelisten werden aktualisiert.
Fehlerbehebung
Kein Modul namens lxml
Wenn Sie eine Fehlermeldung erhalten ... ImportError: No module named lxml ...
, müssen Sie Python Xml Parser installieren :
sudo apt-get install python-lxml
Zugang verweigert
Wenn Sie die Meldung "Berechtigung verweigert" erhalten, liegt dies entweder daran, dass Sie nicht über ausreichende Berechtigungen verfügen, um auf die Datei im Verzeichnis anderer Benutzer zuzugreifen, oder daran, dass die Datei nicht ausführbar ist. Um es ausführbar zu machen, führen Sie Folgendes aus:
chmod +x /path/to/your/rhythmbox-banshee-import-script
Blinddarm
rhythmbox-banshee-import Script
#!/usr/bin/python
"""
Copyright (c) 2009 Wolfgang Steitz
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 3 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 Street, Fifth Floor, Boston, MA 02110-1301 USA
"""
import sys
import sqlite3
from lxml import etree
RB_DB = 'rhythmdb.xml'
BA_DB = 'banshee.db'
class banshee_db():
def __init__(self, file):
self.con = sqlite3.connect(file)
def get_song_info(self, url):
try:
res = self.con.execute('select Rating, Playcount from CoreTracks where uri = ?', (url,) ).fetchone()
if res is None:
return None, None
else:
return res
except:
return None, None
banshee = banshee_db(BA_DB)
tree = etree.parse(RB_DB)
root = tree.getroot()
for song in root:
if song.get("type") == 'song':
rating = None
playcount = None
for attr in song:
if attr.tag == 'location':
location = attr.text
if attr.tag == 'rating':
rating = attr.text
if attr.tag == 'play-count':
playcount = int(attr.text)
song.remove(attr)
rating_banshee, playcount_banshee = banshee.get_song_info(location)
if rating is None:# noch kein rating in db
if not (rating_banshee == 0 or rating_banshee is None):
rating = rating_banshee
if not (playcount_banshee == 0 or playcount_banshee is None):
if playcount is None:
playcount = playcount_banshee
else:
playcount += playcount_banshee
#insert rating into rb db
if rating is not None:
element = etree.Element('rating')
element.text = str(rating)
song.append( element)
#update playcount
if playcount is not None:
element = etree.Element('play-count')
element.text = str(playcount)
song.append( element)
tree.write(RB_DB)