rhythmbox是gnome下一款开源的音乐播放软件。ubuntu和fedora的桌面环境中均默认安装了rhythmbox。

rhythmbox架构非常灵活,几乎所有地方都可以用插件来修改。用户想实现什么功能,都可以通过插件来

实现。

为了方便开发第三方插件,官网提供了详细的插件开发教材。但是,它已经过时了:rhythmbox升级到2.99

的时候,修改了很多API(我猜是为了对应gnome3?? python3???)。这次蛋疼的不向下兼容的升级导致很多

旧的插件都不能用了,有的插件开发者为了对应rhythmbox3只得为rhythmbox2和3建立了不同的开发分支。

将基于版本2的rhythmbox开发的插件“移植”到版本3上的方法是通过xxx_rb3compat.py。

rhythmbox的插件主要由c和python开发。用c开发需要很丰富的GObject-based C背景知识,很显然为没有,

所以我尝试的方法是使用python开发。下面介绍使用python开发rhythmbox plugin(rhythmbox 版本>=2.99)

的具体方法。以我尝试开发的插件xiami为例



首先说插件的安装

一般来说,使用python开发的rhythmbox插件不需要安装,只需将代码文件和配置文件放到指定的文件夹,并且

按照一定的规则命名文件,插件就能被自动识别(和vim插件类似)。

插件可以放在三个地方
a /usr/share/lib/rhythmbox/plugins 一般情况下除了官方插件,不要把插件放到这里
b $HOME//.local/share/rhythmbox/plugins(这里和版本2的路径不同)
c 为了用c开发插件的开发者使用的路径,这里不做介绍


最基本的插件由两类文件组成:后缀名为py的源代码文件和后缀名为plugin(或者是rb-plugin)的配置文件

a配置文件。在$HOME//.local/share/rhythmbox/plugins/xiami文件夹下新建文件xiami.plugin
 [Plugin]
Loader=python3
Module=xiami
IAge=2
Name=RB Plugin For xiami
Name[zh_CN]=虾米插件
Description=This is a RB Plugin for xiami,still in test
Description[zh_CN]=虾米的RB插件,还在测试中
Authors=Liu Peng <solo_o@foxmail.com>
Copyright=2014@s0_0s
Website=http://fingerliu.github.io

这里需要注意的地方有三个,Loader这里和2.99以前的版本不同,貌似如果写python会导致无法加载插件;Module设定为你插件的名字,一般和文件夹名一致;IAge设定为2。


b源代码。在$HOME//.local/share/rhythmbox/plugins/xiami文件夹下新建文件xiami.py

这里和2.99版本以前也不相同。以前可以将文件命名为__init__.py,现在貌似必须命名为Module名(因为用了python3??)

 from gi.repository import GObject, RB, Peas
import gettext
gettext.install('rhythmbox',RB.locale_dir())
class xiami (GObject.Object, Peas.Activatable):
__gtype_name = 'xiamiPlugin'
object = GObject.property(type=GObject.Object) def __init__(self):
GObject.Object.__init__(self) def do_activate(self):
print ("Hello I am XiaMi")
shell = self.object
db = shell.props.db
model = RB.RhythmDBQueryModel.new_empty(db)
self.source = GObject.new(xiamiSource, shell=shell, name=_("XiaMi"), query_model=model)
self.source.setup()
group = RB.DisplayPageGroup.get_by_id("library")
shell.append_display_page(self.source, group) def do_deactivate(self):
print("deactivating XiaMi plugin")
self.source.delete_thyself()
self.source = None class xiamiSource(RB.Source):
def __init__(self,**kwargs):
super(xiamiSource,self).__init__(kwargs) def setup(self):
shell = self.props.shell
songs = RB.EntryView(db=shell.props.db,shell_player=shell.props.shell_player,is_drag_source=False,is_drag_dest=False)
songs.append_column(RB.EntryViewColumn.TITLE,True)
songs.set_model(self.props.query_model)
songs.show_all()
self.pack_start(songs,expand=True,fill=True,padding=-0) GObject.type_register(xiamiSource)

这个基本上是照抄的官方的例子,默认被放在/usr/lib/rhythmbox/sample-plugins/sample-python下。这个插件作了两件事:1 在控制台print了两句话 2在rhythmbox主界面的

库(library)里添加了一项xiami。



接下来就可以启动rhythmbox,加载我们的控件了

启动rhythmbox-->点击导航条上的rhythmbox-->插件-->进入的配置插件界面,选择新建的插件“虾米插件”

然后就可以在主界面左侧的库中多了一个XiaMi

没有对齐的原因是因为没有添加icon,左侧是icon的位置。



注:我使用的系统是fedora20 32bit,python版本是3.3.2,rhythmbox版本是3.0.3



有用的链接:

[1] https://wiki.gnome.org/Apps/Rhythmbox/Plugins/ThirdParty

[2] https://wiki.gnome.org/Apps/Rhythmbox/Plugins/WritingGuide

[3] https://wiki.gnome.org/Apps/Rhythmbox/InternalDesign

[4]http://forum.ubuntu.org.cn/viewtopic.php?f=74&t=285988&start=0&sid=67551a4a2bd527cbcb894dd8ac1c121f

1列举了一些现有的第三方插件,可以借鉴它们是怎么写的。

2,3有些地方已经过时

4是前辈写的一个豆瓣FM的插件,不过貌似2.99以上的已经用不了这个插件了。

 

rhythmbox插件开发笔记1:简介&入门的更多相关文章

  1. rhythmbox插件开发笔记3:安装 makefile && schema && po

    本篇主要讲通过makefile方式来安装rhythmbox插件的相关知识. makefile 如果makefile是什么,请自行谷歌 参考了pandasunny同学的rhythmbox-baidu-m ...

  2. rhythmbox插件开发笔记2:背景知识学习 D-Bus&VFS&Gio& Python GTK+ 3

    这次主要简单介绍下相关的背景知识 D-Bus&VFS&Gio& Python GTK+ 3  D-Bus D-Bus是开源的进程通信(IPC)系统,它允许多个进程进行实时通信. ...

  3. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  4. Python编程从入门到实践笔记——列表简介

    Python编程从入门到实践笔记——列表简介 #coding=utf-8 #列表——我的理解等于C语言和Java中的数组 bicycles = ["trek","cann ...

  5. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  6. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  7. 01-项目简介Springboot简介入门配置项目准备

    总体课程主要分为4个阶段课程: ------------------------课程介绍------------------------ 01-项目简介Springboot简介入门配置项目准备02-M ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  9. jQuery:自学笔记(1)——基础入门

    jQuery:自学笔记(1)——基础入门 认识JQuery 1.jQuery概述 jQuery是一个快速.小巧 .功能丰富的JavaScript函数库.它可以实现“写的少,做的多”的目标. jQuer ...

随机推荐

  1. UIActionSheet 传值

    #pragma mark - actionSheet - (void)shareOrder:(NSDictionary *)product { UIActionSheet *as = [[UIActi ...

  2. Ubuntu设置环境变量并立即生效

    Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ...

  3. 内存调试工具---valgrind

    安装 1.到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2.解压安装包:tar –jxvf valgrind-3.2.3.tar.bz2 3.解压后生成目录 ...

  4. springmvc 注解 RequestParam/RequestHeader/CookieValue

    RequestParam注解: 示例: @RequestMapping("/testRequestParam") public String testRequestParam(@R ...

  5. POJ 1149 PIGS 【网络流】

    题意: m n   //有m个猪圈,n个人卖猪. a1...am    //编号为i的猪圈里有ai头猪. b1 c1...cb1 d1   //第i个人有bi把钥匙,分别是ci猪圈的,其它猪圈里的猪都 ...

  6. Nginx作为静态内容服务器(Windows环境)

    1.简单安装 1)下载 http://nginx.org/en/download.html 2)解压后的路径 E:\Study\nginx\nginx-1.7.6 3)执行nginx.exe,访问ht ...

  7. 菜鸟-手把手教你把Acegi应用到实际项目中(3)

    这一节我们将要了解的是AnonymousProcessingFilter.RememberMeProcessingFilter和LogoutFilter三个过滤器. 1.AnonymousProces ...

  8. GLib基础

    实用功能 GLib中包含了近二十种实用功能,从简单的字符处理到初学者很难理解的XML解析功能,这里介绍两种较简单的:随机数和计时. 下面代码演示如何产生1-100之间的随机整数和演示如何计算30000 ...

  9. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  10. JS实现电子时钟

          目前有个小项目,在首页头部导航栏里需要一个电子时钟的效果,于是我就采用如下代码实现了一个电子时钟的效果.不过不完美,第一种方式容易导致网页莫名其妙的异常,后来觉得可能是做的操作太多了,然后 ...