我曾经通过调用“ 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.crb_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;
        }

10-06 00:54