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
 1 [Plugin]
 2 Loader=python3
 3 Module=xiami
 4 IAge=2
 5 Name=RB Plugin For xiami
 6 Name[zh_CN]=虾米插件
 7 Description=This is a RB Plugin for xiami,still in test
 8 Description[zh_CN]=虾米的RB插件,还在测试中
 9 Authors=Liu Peng <solo_o@foxmail.com>
10 Copyright=2014@s0_0s
11 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??)

 1 from gi.repository import GObject, RB, Peas
 2 import gettext
 3 gettext.install('rhythmbox',RB.locale_dir())
 4 class xiami (GObject.Object, Peas.Activatable):
 5         __gtype_name = 'xiamiPlugin'
 6         object = GObject.property(type=GObject.Object)
 7
 8         def __init__(self):
 9                 GObject.Object.__init__(self)
10
11         def do_activate(self):
12                 print ("Hello I am XiaMi")
13                 shell = self.object
14                 db = shell.props.db
15                 model = RB.RhythmDBQueryModel.new_empty(db)
16                 self.source = GObject.new(xiamiSource, shell=shell, name=_("XiaMi"), query_model=model)
17                 self.source.setup()
18                 group = RB.DisplayPageGroup.get_by_id("library")
19                 shell.append_display_page(self.source, group)
20
21         def do_deactivate(self):
22                 print("deactivating XiaMi plugin")
23                 self.source.delete_thyself()
24                 self.source = None
25
26 class xiamiSource(RB.Source):
27         def __init__(self,**kwargs):
28                 super(xiamiSource,self).__init__(kwargs)
29
30         def setup(self):
31                 shell = self.props.shell
32                 songs = RB.EntryView(db=shell.props.db,shell_player=shell.props.shell_player,is_drag_source=False,is_drag_dest=False)
33                songs.append_column(RB.EntryViewColumn.TITLE,True)
34                 songs.set_model(self.props.query_model)
35                 songs.show_all()
36                 self.pack_start(songs,expand=True,fill=True,padding=-0)
37
38 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以上的已经用不了这个插件了。

转载于:https://www.cnblogs.com/s0-0s/p/3836732.html

rhythmbox插件开发笔记1:简介入门相关推荐

  1. 互联网电商大数据环境 ——大数飓数据分析实践培训精华笔记(一)——简介入门

    互联网电商大数据环境 --数据分析实践培训精华笔记(一) 工作内容 项目:DW数据库建设/经分/客户精准营销/推荐系统需求/移动端数据分析 数据:流量数据/交易数据B2C/会员与活动数据/物流与配送数 ...

  2. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介

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

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

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

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

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

  5. 【学习笔记】密码学入门(2) 单向散列函数,消息认证码,数字签名,证书

    [学习笔记]密码学入门(2) 单向散列函数,消息认证码,数字签名,证书 学习笔记 2 – 混合密码系统 在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统. 这一部分将学习到 ...

  6. Kubernetes CKA认证运维工程师笔记-Docker快速入门

    Kubernetes CKA认证运维工程师笔记-Docker快速入门 1. Docker 概念与安装 1.1 Docker 是什么 1.2 Docker 基本组成 1.3 版本与支持平台 1.4 Do ...

  7. 《算竞(紫书)》笔记1 STL入门

    <算竞(紫书)>笔记1 STL入门 16340040 SDCS 目录 算竞紫书笔记1 STL入门 某些抢开头的废话 STL 1 排序 2 不定长数组vector 3 集合set 4 映射m ...

  8. 读书笔记-TCP简介

    @(Network)[tcp, congestion control] 读书笔记-TCP简介 本文主要记录阅读linuxtcp文章,其第二章中主要介绍了TCP拥塞控制的基础和一些发展历程,这里作为整理 ...

  9. 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体

    本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...

  10. oracle 删除awr报告,学习笔记:Oracle awr入门 深入了解AWR报告

    天萃荷净 深入了解AWR报告,ASH与AWR报告的官方说明,数据库进程和性能视图获取 1.AWR与ASH概念 1.ASH 若是一个普通的会话(我是指没有大量地耗费资源),则对于性能调整来说无足轻重.但 ...

最新文章

  1. Delphi中的指针类型
  2. Android开发之根据Service的生命周期特点后台连接网络下载图片(源代码分享)
  3. think in baidu
  4. 项目移植,项目环境问题
  5. 弹出并点击弹框关闭 自定义toast_关于别名配置使用弹框交互应用的思考
  6. 电子之嵌入式主流芯片浏览
  7. 使用with关键字让你的Python代码更加Pythonic
  8. dubbo日志关闭_不可忽视的Dubbo线程池避坑指南
  9. Airbnb如何简化1000多位工程师的Kubernetes工作流程?
  10. msyql之解决mysql出现ERROR 1698 (28000): Access denied的问题
  11. java8中一个极其强悍的新特性Stream(非常实用)
  12. JVM 堆内存设置 -Xmx -Xms
  13. Java进阶:SpringMVC文件上传
  14. 拓端tecdat|R语言数据可视化分析案例:探索BRFSS数据
  15. 将汉语转换成拼音,实现拼音和中文双重登录
  16. FSA-Net学习笔记
  17. 3d max 安装及激活教程
  18. vim编辑器替换以及全局替换
  19. 【linux命令】文件管理(上)
  20. 一览生信分析的各种工作环境—Linux子系统、双系统、虚拟机和Docker

热门文章

  1. mac中有关delete删除键的5种用法
  2. 5-(4-硝基苯基)-10,15,20-三苯基卟啉NTPPH2/NTPPZn/NTPPMn/NTPPFe/NTPPNi/NTPPCu/NTPPCd/NTPPCo等金属配合物
  3. 数学模型学习——图与网络
  4. 分享一组制作游戏用的人物立绘/角色形象素材图片,共717张图片
  5. HTTP协议简介和系统命令curl,AIP调用 (ELK中运用)
  6. 解决win10Docker安装失败问题
  7. 完美:利用旧版iCloud更改Apple ID地区
  8. 不会画关系图?5 类图形为你展示—变量间相互关系—提供示例与完整代码-ggplot2-geom_point-ComplexHeatmap-pheatmap-ggpairs
  9. Winedit7.0自定义一键编译
  10. Oracle中的空值问题