我曾经通过调用“ rhythmbox [podcast的URL]”来订阅新的Podcast,但是由于this bug而不再起作用。它只是打开Rhythmbox,而不是打开和订阅。 (尽管如果您恰巧在播客部分中单击“添加”,它确实会预先填充)
GTK3应用程序之间应该有某种新的通信方式,还是没有办法简单地告诉Rhythmbox订阅某个播客?
更新:查看答案here,我在iPython中发现了以下带有很多Tab键的内容:
from gi.repository import RB
....
In [2]: RB.PodcastManager.insert_feed_url
Out[2]: gi.FunctionInfo(insert_feed_url)
In [3]: RB.PodcastManager.insert_feed_url('http://feeds.feedburner.com/NodeUp')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-b6415d6bfb17> in <module>()
----> 1 RB.PodcastManager.insert_feed_url('http://feeds.feedburner.com/NodeUp')
TypeError: insert_feed_url() takes exactly 2 arguments (1 given)
这似乎是正确的API,但是参数是什么?它可以在GTK3之前的系统中工作吗?
更新通过Python api here,我想我差不多了:
from gi.repository import RB
mypod = RB.PodcastChannel() #Creates blank podcast object
RB.podcast_parse_load_feed(mypod, 'http://wpdevtable.com/feed/podcast/', False)
#loads mypod.url, mypod.description etc.
RB.PodcastManager.add_parsed_feed(mypod); #fails
似乎add_parsed_feed上的文档不正确,并且需要2个参数,而不是1个。我知道内部类的函数是用
def thing(self, firstarg)
定义的,这是否在某种程度上引起了与Rhythmbox的Python绑定问题?为什么不能将已解析的播客添加到Rhythmbox? 最佳答案
您需要在调用PodcastManager
之前实例化add_parsed_feed
对象,以便将self
作为第一个参数隐式提供:
manager = RB.PodcastManager()
manager.add_parsed_feed(mypod)
要么
RB.PodcastManager().add_parsed_feed(mypod)
当您以这种方式调用它时,
add_parsed_feed
方法将绑定到您创建的RB.PodcastManager
实例。当您调用绑定方法时,绑定到该实例的实例(在这种情况下为manager
)将自动作为第一个参数提供(最终将成为self
内的add_parsed_feed
)。另一方面,当您调用
RB.PodcastManager.add_parsed_feed
时,add_parsed_feed
方法未绑定到RB.PodcastManager
的任何实例,因此Python无法自动提供该实例作为第一个参数。这就是为什么会收到仅提供一个参数的错误的原因。编辑:
请注意,使用此API似乎无法正常工作。即使我从Rhythmbox中嵌入的Python控制台中使用它,对我来说似乎总是存在段错误。如果您不介意编辑Rhythmbox源代码并自己构建它,则获得所需的行为实际上非常容易,这只是一行更改。在
shell/rb-shell.c
的rb_shell_load_uri
函数中,更改以下行:rb_podcast_source_add_feed (shell->priv->podcast_source, uri);
对此:
rb_podcast_manager_subscribe_feed (shell->priv->podcast_manager, uri, TRUE);
然后重建。现在,当您在启动Rhythmbox时包含一个播客URI时,它将订阅供稿并开始播放。
这是补丁程序形式的更改:
diff --git a/shell/rb-shell.c b/shell/rb-shell.c
index 77526d9..e426396 100644
--- a/shell/rb-shell.c
+++ b/shell/rb-shell.c
@@ -2995,7 +2995,7 @@ rb_shell_load_uri (RBShell *shell,
/* If the URI points to a Podcast, pass it on to the Podcast source */
if (rb_uri_could_be_podcast (uri, NULL)) {
rb_shell_select_page (shell, RB_DISPLAY_PAGE (shell->priv->podcast_source));
- rb_podcast_source_add_feed (shell->priv->podcast_source, uri);
+ rb_podcast_manager_subscribe_feed (shell->priv->podcast_manager, uri, TRUE);
return TRUE;
}