Tập lệnh nhập hộp nhịp điệu-banshee sẽ di chuyển số lần chơi và xếp hạng . Cảm ơn @xiphosurus. Tuy nhiên, để kịch bản hoạt động, bạn cần cho nó biết cơ sở dữ liệu banshee và nhịp điệu.
Chuẩn bị kịch bản
Xác định vị trí các tệp db của bạn và banshee. Các vị trí mặc định sẽ là:
/home/YOUR_USERNAME/.local/share/rhythmbox/rhythmdb.xml
/home/YOUR_USERNAME/.config/banshee-1/banshee.db
Sao lưu chúng lên! Tôi sẽ nói lại lần nữa. Tạo một bản sao lưu.
Bây giờ sao chép tệp banshee.db vào cùng thư mục với tập lệnh nhịp điệu-banshee-import. Và sau đó sửa đổi tập lệnh nhịp điệu-banshee-nhập trong đó dòng nói:
RB_DB = 'rhythmdb.xml'
chèn tệp đường dẫn / đến / your / nhịpboxdb.xml, vd:
RB_DB = '/home/YOUR_USERNAME/.local/share/rhythmbox/rhythmdb.xml'
Bây giờ hãy chạy tập lệnh và tất cả số lần phát và danh sách phát sẽ được cập nhật.
Xử lý sự cố
Không có mô-đun có tên lxml
Nếu bạn gặp lỗi, ... ImportError: No module named lxml ...
bạn cần cài đặt Trình phân tích cú pháp Python Xml :
sudo apt-get install python-lxml
Quyền bị từ chối
Nếu bạn nhận được "Quyền bị từ chối", thì đó là do bạn không có đủ quyền truy cập tệp trong thư mục của người dùng khác hoặc do tệp không được thực thi. Để làm cho nó có thể thực thi được, hãy chạy:
chmod +x /path/to/your/rhythmbox-banshee-import-script
ruột thừa
Scriptbox-banshee-import
#!/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)