1

以前は「rhythmbox [ポッドキャストの URL]」を呼び出して新しいポッドキャストを購読していましたが、このバグにより機能しなくなりました。開いてサブスクライブするのではなく、Rhythmbox を開くだけです。(ただし、ポッドキャスト セクションで [追加] をクリックすると、事前に入力されます)

GTK3 アプリが相互に通信するための新しい方法はありますか? それとも、アプリが Rhythmbox に特定のポッドキャストを購読するように指示するだけの方法はありませんか?

更新:ここで回答を見ると、iPythonで多くのタブキーを使用して次のことがわかりました:

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を実行すると、ほぼ完了していると思います。

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 のドキュメントが間違っているようで、1 つではなく 2 つの引数が必要です。内部的にクラスの関数が で定義されていることは知っていますがdef thing(self, firstarg)、これが Python の Rhythmbox へのバインディングで何らかの問題を引き起こしているのでしょうか? 解析されたポッドキャストを Rhythmbox に追加できないのはなぜですか?

4

1 に答える 1

1

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 はそのインスタンスを最初の引数として自動的に提供できません。そのため、引数が 1 つしか指定されていないというエラーが発生します。

編集:

この API を使用しても正しく動作しないように見えることに注意してください。Rhythmbox に埋め込まれた Python コンソールから使用しても、常に segfault のように見えます。Rhythmbox のソース コードを編集して自分でビルドすることを気にしなければ、必要な動作を実現するのは実際には非常に簡単です。たった 1 行の変更です。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);

その後、再構築します。これで、リズムボックスを起動するときにポッドキャスト 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;
        }
于 2014-09-05T02:43:45.753 に答える