Hello community,
here is the log from the commit of package banshee-doubanfm for openSUSE:Factory checked in at 2012-10-13 19:51:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/banshee-doubanfm (Old)
and /work/SRC/openSUSE:Factory/.banshee-doubanfm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "banshee-doubanfm", Maintainer is ""
Changes:
--------
--- /work/SRC/openSUSE:Factory/banshee-doubanfm/banshee-doubanfm.changes 2012-06-25 12:22:25.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.banshee-doubanfm.new/banshee-doubanfm.changes 2012-10-13 19:55:05.000000000 +0200
@@ -1,0 +2,7 @@
+Wed Sep 26 21:51:05 CST 2012 - hillwood@linuxfans.org
+
++ Update to version 0.3.4:
+ - Reachieve offline radio.
+ - Fix some bugs.
+
+-------------------------------------------------------------------
Old:
----
pro711-banshee-doubanfm-18ba48f65d87.tar.bz2
New:
----
pro711-banshee-doubanfm-44400efeb772.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ banshee-doubanfm.spec ++++++
--- /var/tmp/diff_new_pack.N566DG/_old 2012-10-13 19:55:07.000000000 +0200
+++ /var/tmp/diff_new_pack.N566DG/_new 2012-10-13 19:55:07.000000000 +0200
@@ -17,20 +17,20 @@
Name: banshee-doubanfm
-Version: 0.3.2
-Release: 1
-License: MIT
+Version: 0.3.4
+Release: 0
Summary: DoubanFM Extension for Banshee media player
+License: MIT
+Group: Productivity/Multimedia/Sound/Players
Summary(zh_CN): Banshee 播放器的豆瓣扩展
Url: https://bitbucket.org/pro711/banshee-doubanfm/overview
-Group: Productivity/Multimedia/Sound/Players
-Source: pro711-%{name}-18ba48f65d87.tar.bz2
+Source: pro711-%{name}-44400efeb772.tar.bz2
BuildRequires: gconf2-devel
BuildRequires: intltool
# needed for autogen.sh
+BuildRequires: gnome-doc-utils-devel >= 0.17.3
BuildRequires: libtool
BuildRequires: mono-devel >= 1.9.1
-BuildRequires: gnome-doc-utils-devel >= 0.17.3
BuildRequires: pkgconfig(banshee-thickclient) >= 1.9.6
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -59,7 +59,7 @@
%lang_package -n banshee-extension-doubanfm
%prep
-%setup -q -n pro711-%{name}-18ba48f65d87
+%setup -q -n pro711-%{name}-44400efeb772
%build
# There's no configure, so we need to call autogen.sh first
++++++ pro711-banshee-doubanfm-18ba48f65d87.tar.bz2 -> pro711-banshee-doubanfm-44400efeb772.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/.hg_archival.txt new/pro711-banshee-doubanfm-44400efeb772/.hg_archival.txt
--- old/pro711-banshee-doubanfm-18ba48f65d87/.hg_archival.txt 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/.hg_archival.txt 2012-09-10 09:33:31.000000000 +0200
@@ -1,5 +1,5 @@
repo: 77750bd141c5d9156d6c61dcac251b9bd27f6947
-node: 18ba48f65d870e7b4c6fb9bad3e5b05d53f767c2
+node: 44400efeb772d9f6892a6841ccef007d0e07a8bf
branch: default
-latesttag: 0.3.2
-latesttagdistance: 3
+latesttag: 0.3.1
+latesttagdistance: 16
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/.hgtags new/pro711-banshee-doubanfm-44400efeb772/.hgtags
--- old/pro711-banshee-doubanfm-18ba48f65d87/.hgtags 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/.hgtags 2012-09-10 09:33:31.000000000 +0200
@@ -3,3 +3,7 @@
f8732fdf18330c39224f0c89bed91c353a16747a 0.3.0
443e901c8e12f243787a4b0d59c050546a5c16fb 0.3.1
70af000c6b82813791961e77e3441921221a8857 0.3.2
+70af000c6b82813791961e77e3441921221a8857 0.3.2
+18ba48f65d870e7b4c6fb9bad3e5b05d53f767c2 0.3.2
+18ba48f65d870e7b4c6fb9bad3e5b05d53f767c2 0.3.2
+0000000000000000000000000000000000000000 0.3.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/po/POTFILES.in new/pro711-banshee-doubanfm-44400efeb772/po/POTFILES.in
--- old/pro711-banshee-doubanfm-18ba48f65d87/po/POTFILES.in 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/po/POTFILES.in 2012-09-10 09:33:31.000000000 +0200
@@ -9,3 +9,4 @@
src/DoubanFM/Banshee.DoubanFM/Widgets.cs
src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs
src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs
+src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/po/zh_CN.po new/pro711-banshee-doubanfm-44400efeb772/po/zh_CN.po
--- old/pro711-banshee-doubanfm-18ba48f65d87/po/zh_CN.po 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/po/zh_CN.po 2012-09-10 09:33:31.000000000 +0200
@@ -2,101 +2,107 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
-# Chen Tao , 2011.
+# asy , 2012.
#
msgid ""
msgstr ""
-"Project-Id-Version: banshee-doubanfm\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-01 18:15+0800\n"
-"PO-Revision-Date: 2011-09-01 18:15+0800\n"
-"Last-Translator: Chen Tao \n"
-"Language-Team: LANGUAGE \n"
-"Language: zh_CN\n"
+"POT-Creation-Date: 2012-06-04 13:48+0800\n"
+"PO-Revision-Date: 2012-06-04 14:11+0800\n"
+"Last-Translator: asy \n"
+"Language-Team: 汉语 <>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:54
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:52
msgid "Love Track"
msgstr "喜欢"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:55
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:53
msgid "Mark current track as loved"
-msgstr "标记当前歌曲为喜欢的"
+msgstr "标记当前歌曲为喜欢"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:59
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:57
msgid "Cancel Love Track"
msgstr "取消喜欢"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:60
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:58
msgid "Cancel marking track as loved"
-msgstr "取消标记当前歌曲为喜欢的"
+msgstr "取消标记当前歌曲为喜欢"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:64
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:62
msgid "Ban Track"
msgstr "禁止"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:65
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:63
msgid "Mark current track as banned"
-msgstr "标记当前歌曲为禁止播放"
+msgstr "标记当前歌曲为禁止"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:70
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:68
msgid "View track info on Douban.com"
-msgstr "在豆瓣网上查看歌曲信息"
+msgstr "在douban.com查看歌曲信息"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:85
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:83
msgid "_DoubanFM"
-msgstr "豆瓣电台(_D)"
+msgstr "豆瓣电台"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:86
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:89
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:84
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:87
msgid "Configure DoubanFM"
msgstr "配置豆瓣电台"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:88
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs:86
msgid "_Configure"
-msgstr "配置(_C)"
+msgstr "配置"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSourceContents.cs:83
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSourceContents.cs:80
msgid "Channels"
msgstr "频道"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:81
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:82
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:87
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:88
msgid "DoubanFM"
msgstr "豆瓣电台"
-#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:143
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:145
msgid ""
"Douban FM login error. Please check Internet connection and your username "
"and password."
-msgstr "登录豆瓣电台失败。请检查网络连接以及用户名和密码设置。"
+msgstr "登录豆瓣电台失败,请检查网络连接和用户信息"
-#: ../src/DoubanFM/Banshee.DoubanFM/Widgets.cs:78
+#: ../src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs:203
+msgid "You may can't play this without login"
+msgstr "在没登录的情况下你可能不能播放这个"
+
+#: ../src/DoubanFM/Banshee.DoubanFM/Widgets.cs:97
msgid "Loading channels"
msgstr "载入频道"
-#: ../src/DoubanFM/Banshee.DoubanFM/Widgets.cs:79
+#: ../src/DoubanFM/Banshee.DoubanFM/Widgets.cs:98
msgid "Please wait..."
-msgstr "请稍候…"
+msgstr "请稍后……"
-#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs:19
+#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs:17
msgid "Please input verification code"
msgstr "请输入验证码"
-#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:26
+#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:20
msgid "DoubanFM Configuration"
-msgstr "豆瓣电台设置"
+msgstr "豆瓣电台配置"
-#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:41
+#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:35
msgid "Email"
-msgstr "电子邮件"
+msgstr "邮箱地址"
-#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:49
+#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs:43
msgid "Password"
msgstr "密码"
-#: ../src/DoubanFM/gtk-gui/Banshee.DoubanFM.DoubanFMSource.cs:201
-msgid "You may can't play this without login"
-msgstr "没有登录有些电台会不可用"
+#: ../src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs:44
+#: ../src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs:45
+msgid "DoubanOfflineFM"
+msgstr "离线电台"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFM.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFM.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFM.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFM.cs 2012-09-10 09:33:31.000000000 +0200
@@ -127,11 +127,6 @@
this.Song = song;
}
}
-
- /// <summary>
- /// Douban FM rate handler.
- /// </summary>
- public delegate void DoubanFMRateHandler (object sender,DoubanFMRateEventArgs e);
/// <summary>
@@ -139,7 +134,7 @@
/// </summary>
public class DoubanFM : IDoubanFMPlayQueue, IDisposable
{
- public event DoubanFMRateHandler DoubanFMRateEvent;
+
public static DoubanFM Instance {
get;
@@ -187,21 +182,13 @@
// Thread loadChannelsThread = new Thread(new ThreadStart(LoadChannels));
// loadChannelsThread.Start();
if (this.currentuser != null && !string.IsNullOrEmpty (this.currentuser.Username) &&
- !string.IsNullOrEmpty (this.currentuser.Password)) {
+ !string.IsNullOrEmpty (this.currentuser.Password)) {
Login (this.currentuser);
}
LoadChannels ();
// loadChannelsThread.Join();
}
-
- private void EmitDoubanFMRateEvent (object sender, DoubanFMRateEventArgs e)
- {
- if (this.DoubanFMRateEvent != null) {
- Hyena.Log.Debug ("DoubanFM Rate Event emit");
- this.DoubanFMRateEvent (sender, e);
- }
- }
public void ConnectPlaybackFinished ()
{
@@ -257,7 +244,8 @@
captcha.Run ();
captchaText = captcha.CaptchaText;
captcha.Destroy ();
- });
+ }
+ );
// wait for user to input captcha
while (captchaText == "")
Thread.Sleep (100);
@@ -348,14 +336,7 @@
request.CookieContainer = DoubanFMContext.Instance.CookieJar;
response = (HttpWebResponse)request.GetResponse ();
throw new CaptchaException (ParseCaptchaId (new StreamReader (response.GetResponseStream ()).ReadToEnd ()));
- }/* else if (location.Contains ("error=notmatch")) {//notmatch==>1011
- // username/password mismatch
-// LoginErrorEvent();
- throw new DoubanLoginException ();
- } else if (location.Contains ("error=notused")) {//notused==>1011
- // username does not exist
- throw new DoubanLoginException ();
- } */ else if (location.Contains ("error=")) {
+ } else if (location.Contains ("error=")) {
// other errors
throw new DoubanLoginException ();
}
@@ -502,7 +483,8 @@
}*/
Gtk.Application.Invoke (delegate {
RefreshChannels ();
- });
+ }
+ );
}
/// <summary>
@@ -598,7 +580,6 @@
// Read the content.
responseFromServer = reader.ReadToEnd ();
- Hyena.Log.Debug ("Response: " + responseFromServer);
} catch (WebException e) {
Hyena.Log.Exception (e);
}
@@ -609,6 +590,7 @@
public List<DoubanFMSong> JsonToDoubanFMSongs (string json)
{
Deserializer deserializer = new Deserializer (json);
+ Hyena.Log.Debug (string.Format ("JSON:{0}", json));
JsonObject obj = (JsonObject)deserializer.Deserialize ();
try {
JsonArray song = (JsonArray)obj ["song"];
@@ -690,7 +672,7 @@
var _params = GetDefaultParams ("n");
_params ["h"] = FormatHistoryList (10);
string results = RemoteFM (_params);
- Hyena.Log.Debug (string.Format ("results={0}", results));
+ //Hyena.Log.Debug (string.Format ("results={0}", results));
return JsonToDoubanFMSongs (results);
}
@@ -720,7 +702,7 @@
public List<DoubanFMSong> BanSong (string sid, string aid)
{
List<DoubanFMSong> songs = BanSong (sid, aid, Enumerable.Empty<string> ().ToList ());
- this.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.Hate, songs != null && songs.Count > 0 ? songs [0] : null));
+ EventBus.Instance.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.Hate, songs != null && songs.Count > 0 ? songs [0] : null));
this.playList = songs;
ServiceManager.PlaybackController.Next ();
return songs;
@@ -734,7 +716,7 @@
string results = RemoteFM (_params);
song.like = true;
- this.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.Love, song));
+ EventBus.Instance.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.Love, song));
List<DoubanFMSong> songs = JsonToDoubanFMSongs (results);
playList = songs;
return songs;
@@ -749,7 +731,7 @@
string results = RemoteFM (_params);
song.like = false;
- this.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.CancelLove, song));
+ EventBus.Instance.EmitDoubanFMRateEvent (this, new DoubanFMRateEventArgs (DoubanFMRateAction.CancelLove, song));
List<DoubanFMSong> songs = JsonToDoubanFMSongs (results);
playList = songs;
return songs;
@@ -795,7 +777,8 @@
} catch (System.Net.WebException e) {
Hyena.Log.Warning ("Got Exception Trying to PlayedSong", e.ToString (), false);
}
- });
+ }
+ );
song.status = DoubanFMSongStatus.Finished;
history.Add (song);
}
@@ -824,7 +807,8 @@
} catch (System.Net.WebException e) {
Hyena.Log.Warning ("Got Exception Trying to SkipSong", e.ToString (), false);
}
- });
+ }
+ );
song.status = DoubanFMSongStatus.Skipped;
history.Add (song);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMActions.cs 2012-09-10 09:33:31.000000000 +0200
@@ -100,7 +100,7 @@
public void ListenFMEvent ()
{
- this.fmSource.fm.DoubanFMRateEvent += new DoubanFMRateHandler (OnDoubanFMRateEvent);
+ EventBus.Instance.DoubanFMRateEvent += new DoubanFMRateHandler (OnDoubanFMRateEvent);
}
public override void Dispose ()
@@ -196,13 +196,16 @@
TrackInfo current_track = ServiceManager.PlayerEngine.CurrentTrack;
//for the anonymous user all button is invisible
bool isanonymous = DoubanFMUser.IsAnonymousUser (DoubanFMContext.Instance.User);
+ //all action buttons should hide when the playing source is not DoubanFMSource
+ bool isonline_source = ServiceManager.PlaybackController.Source is DoubanFMSource;
this ["DoubanFMFavAction"].Visible = (current_track is DoubanFMSong) &&
- !((DoubanFMSong)current_track).like && !isanonymous;
+ !((DoubanFMSong)current_track).like && !isanonymous && isonline_source;
this ["DoubanFMUnfavAction"].Visible = (current_track is DoubanFMSong) &&
- ((DoubanFMSong)current_track).like && !isanonymous;
+ ((DoubanFMSong)current_track).like && !isanonymous && isonline_source;
// only personal channel has hate action
- this ["DoubanFMHateAction"].Visible = (current_track is DoubanFMSong) && !isanonymous;
- this ["DoubanFMInfoAction"].Visible = (current_track is DoubanFMSong);
+ this ["DoubanFMHateAction"].Visible = (current_track is DoubanFMSong) && !isanonymous
+ && isonline_source;
+ this ["DoubanFMInfoAction"].Visible = (current_track is DoubanFMSong) && isonline_source;
updating = false;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMSong.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMSong.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMSong.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMSong.cs 2012-09-10 09:33:31.000000000 +0200
@@ -24,6 +24,7 @@
using Banshee.Collection;
using Hyena;
using Hyena.Json;
+using System.Xml.Serialization;
namespace Banshee.DoubanFM
{
@@ -41,12 +42,14 @@
public override string AlbumTitle { get; set; }
public override string ArtistName { get; set; }
-
+
public string company;
public string sid;
public string aid;
public string ssid;
public string picture;
+
+ public string PublicTime{ get; set; }
public override TimeSpan Duration { get; set; }
@@ -55,11 +58,12 @@
public bool commited { get; set; }
public DoubanFMSongStatus status { get; set; }
-
+
public override SafeUri Uri {
get;
set;
}
+
/// <summary>
/// Lookup for an field in a JsonObject
@@ -68,7 +72,11 @@
{
return o.ContainsKey (key) ? (T)o [key] : fallback;
}
-
+
+ public DoubanFMSong ():base()
+ {
+ }
+
public DoubanFMSong (JsonObject o) : base()
{
try {
@@ -80,6 +88,7 @@
aid = Lookup<string> (o, "aid", "");
ssid = Lookup<string> (o, "ssid", "");
picture = Lookup<string> (o, "picture", "");
+ PublicTime = Lookup<string> (o, "public_time", string.Empty);
try {
like = Lookup<string> (o, "like", "0") == "0" ? false : true;
} catch {
@@ -89,7 +98,12 @@
like = Lookup<bool> (o, "like", false);
}
}
- Duration = new TimeSpan (0, 0, Lookup<int> (o, "length", 0));
+ try {
+ Duration = new TimeSpan (0, 0, Lookup<int> (o, "length", 0));
+ } catch {
+ string length = Lookup<string> (o, "length", "0").Trim ();
+ Duration = new TimeSpan (0, 0, (int)float.Parse (length));
+ }
this.Uri = new SafeUri ((string)o ["url"]);
status = DoubanFMSongStatus.Unfinished;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/DoubanFMSource.cs 2012-09-10 09:33:31.000000000 +0200
@@ -55,6 +55,7 @@
using Hyena.Json;
using System.Runtime.Remoting.Messaging;
using Banshee.DoubanFM.Service;
+using Banshee.DoubanFM.OfflineFM;
namespace Banshee.DoubanFM
{
@@ -95,6 +96,7 @@
actions = new DoubanFMActions (this);
trackListModel = new MemoryTrackListModel ();
+ DoubanOfflineFMSource.Create (this);
ServiceManager.SourceManager.AddSource (this);
ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
}
@@ -366,7 +368,9 @@
{
ServiceManager.PlaybackController.SourceChanged -= OnPlaybackSourceChanged;
actions.Dispose ();
- this.doubanservice.Dispose ();
+ if (this.doubanservice != null) {
+ this.doubanservice.Dispose ();
+ }
actions = null;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/EventBus.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/EventBus.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/EventBus.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/EventBus.cs 2012-09-10 09:33:31.000000000 +0200
@@ -30,6 +30,11 @@
public delegate void DoubanFMUserLoginHandler (object sender,DoubanFMUserLoginEventArgs e);
public delegate void DoubanFMChangeChannelHandler (object sender,DoubanFMChannel channel);
+
+ /// <summary>
+ /// Douban FM rate handler.
+ /// </summary>
+ public delegate void DoubanFMRateHandler (object sender,DoubanFMRateEventArgs e);
/// <summary>
/// Event bus.
@@ -45,6 +50,7 @@
/// </summary>
public event DoubanFMUserLoginHandler LoginEvent;
public event DoubanFMChangeChannelHandler ChangeChannelRequest;
+ public event DoubanFMRateHandler DoubanFMRateEvent;
public void EmitLoginEvent (object sender, DoubanFMUserLoginEventArgs e)
{
@@ -52,7 +58,15 @@
this.LoginEvent (sender, e);
}
}
-
+
+ public void EmitDoubanFMRateEvent (object sender, DoubanFMRateEventArgs e)
+ {
+ if (this.DoubanFMRateEvent != null) {
+ Hyena.Log.Debug ("DoubanFM Rate Event emit");
+ this.DoubanFMRateEvent (sender, e);
+ }
+ }
+
private EventBus ()
{
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs 1970-01-01 01:00:00.000000000 +0100
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs 2012-09-10 09:33:31.000000000 +0200
@@ -0,0 +1,292 @@
+//
+// DoubanFMLocalSource.cs
+//
+// Author:
+// asy
+//
+// Copyright (c) 2012 asy
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Banshee.Sources;
+using Banshee.PlaybackController;
+using Banshee.MediaEngine;
+using Banshee.Collection;
+using Gdk;
+using Mono.Addins;
+using Banshee.ServiceStack;
+using System.ComponentModel;
+using System.Net;
+using System.IO;
+using Banshee.Library;
+using Banshee.Sources.Gui;
+using System.Collections.Generic;
+using Banshee.Collection.Database;
+using Banshee.Configuration;
+
+namespace Banshee.DoubanFM.OfflineFM
+{
+ /// <summary>
+ /// Douban FM local source.
+ /// </summary>
+ public class DoubanOfflineFMSource:PrimarySource
+ {
+ const int sort_order = 190;
+ private int current_paly_index = -1;
+ private static string USER_HOME = System.Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
+ private static string PATH = Path.Combine (USER_HOME, ".doubanFM");
+ public static string DATA_PATH = Path.Combine (PATH, "data");
+
+ private DoubanOfflineFMSource ():base (AddinManager.CurrentLocalizer.GetString ("DoubanOfflineFM"),
+ AddinManager.CurrentLocalizer.GetString ("DoubanOfflineFM"),
+ "DoubanOfflineFM",
+ sort_order)
+ {
+ this.CheckFilePath ();
+ Pixbuf icon = new Pixbuf (System.Reflection.Assembly.GetExecutingAssembly ().
+ GetManifestResourceStream ("doubanfm_like.png")
+ );
+ Properties.Set<Pixbuf> ("Icon.Pixbuf_16", icon.ScaleSimple (16, 16, InterpType.Bilinear));
+ Properties.Set<string> ("SearchEntryDescription", AddinManager.CurrentLocalizer.GetString ("Search your DoubanFM songs"));
+ DoubanOfflineFMSourceInitialize ();
+ ServiceManager.PlaybackController.TrackStarted += new EventHandler (OnTrackStarted);
+ ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
+ this.AfterInitialized ();
+ }
+
+ public override bool CanRemoveTracks {
+ get {
+ return false;
+ }
+ }
+
+ public override bool HasEditableTrackProperties {
+ get {
+ return false;
+ }
+ }
+
+ private void CheckFilePath ()
+ {
+ if (!System.IO.Directory.Exists (PATH)) {
+ System.IO.Directory.CreateDirectory (PATH);
+ }
+ if (!System.IO.Directory.Exists (DATA_PATH)) {
+ System.IO.Directory.CreateDirectory (DATA_PATH);
+ }
+ }
+
+ protected override void Initialize ()
+ {
+ base.Initialize ();
+ DoubanOfflineFMSourceInitialize ();
+ }
+
+ private void DoubanOfflineFMSourceInitialize ()
+ {
+ DatabaseTrackModel.AddCondition (String.Format ("CoreTracks.PrimarySourceID = {0}", DbId));
+ }
+
+
+ private void OnDownloading (object sender, DoWorkEventArgs e)
+ {
+ DatabaseTrackInfo song = e.Argument as DatabaseTrackInfo;
+ if (song != null) {
+ string song_url = song.Uri;
+ if (!string.IsNullOrEmpty (song_url)) {
+ try {
+ string file_name = string.Format ("{0}_{1}_{2}.mp3", song.AlbumTitle, song.ArtistName, song.TrackTitle);
+ file_name = file_name.Replace ("/", "_M_").Replace ("\\", "_M_");
+ string file_path = Path.Combine (DATA_PATH, file_name);
+ if (!System.IO.File.Exists (file_path)) {
+ this.DownloadHttpData (new Uri (song_url), file_path);
+ song.Uri = new Hyena.SafeUri ("file://" + file_path);
+ e.Result = song;
+ } else {
+ Hyena.Log.Debug ("File already exists,Ignore!");
+ }
+ } catch (Exception ex) {
+ e.Result = ex;
+ }
+ }
+ }
+ }
+
+ private void DownloadHttpData (Uri uri, string file_path)
+ {
+ HttpWebRequest request = (HttpWebRequest)WebRequest.Create (uri);
+ string temp_file_name = Path.GetTempFileName ();
+ using (HttpWebResponse response=(HttpWebResponse)request.GetResponse()) {
+ if (response.ContentLength != 0 && response.StatusCode == HttpStatusCode.OK) {
+ using (Stream fs=new FileStream(temp_file_name,FileMode.Create)) {
+ Stream rs = response.GetResponseStream ();
+ byte [] buff = new byte[1024];
+ int len = rs.Read (buff, 0, buff.Length);
+ while (len > 0) {
+ fs.Write (buff, 0, len);
+ len = rs.Read (buff, 0, buff.Length);
+ }
+ }
+ File.Move (temp_file_name, file_path);
+ }
+ }
+ }
+
+ public override bool CanSearch {
+ get {
+ return true;
+ }
+ }
+
+ protected override void AddTrack (DatabaseTrackInfo track)
+ {
+ if (track.PrimarySourceId == DbId)
+ return;
+ track.PrimarySource = this;
+
+ track.Save (false);
+ }
+
+ private void OnSongDownloaded (object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (e.Result is Exception) {
+ Hyena.Log.DebugException (e.Result as Exception);
+ } else {
+ DatabaseTrackInfo track = e.Result as DatabaseTrackInfo;
+ if (track != null) {
+ this.AddTrack (track);
+ this.Save ();
+ this.NotifyTracksChanged ();
+ }
+ }
+ }
+
+ public override void Save ()
+ {
+ ServiceManager.DbConnection.Execute (
+ "UPDATE CorePrimarySources SET CachedCount = ? WHERE PrimarySourceID = ?",
+ Count, DbId
+ );
+ }
+
+ private void OnPlaybackSourceChanged (object o, EventArgs args)
+ {
+ if (ServiceManager.PlaybackController.Source is DoubanOfflineFMSource) {
+ ServiceManager.PlayerEngine.ConnectEvent (OnRequestNextTrack, PlayerEvent.RequestNextTrack);
+ } else {
+ ServiceManager.PlayerEngine.DisconnectEvent (OnRequestNextTrack);
+ }
+ }
+
+ private void OnTrackStarted (object sender, EventArgs e)
+ {
+ DoubanFMSong track = ServiceManager.PlaybackController.CurrentTrack as DoubanFMSong;
+ if (track != null) {
+ DatabaseTrackInfo dbtrack = this.FromDoubanFMSong (track);
+ if (track.like) {
+ BackgroundWorker worker = new BackgroundWorker ();
+ worker.DoWork += new DoWorkEventHandler (this.OnDownloading);
+ worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler (this.OnSongDownloaded);
+ worker.RunWorkerAsync (dbtrack);
+ } //TODO if the song.like is false then remove the song
+ }
+ }
+
+
+ private DatabaseTrackInfo FromDoubanFMSong (DoubanFMSong song)
+ {
+ DatabaseTrackInfo track = new DatabaseTrackInfo ();
+ track.AlbumArtist = song.AlbumArtist;
+ track.AlbumArtistSort = song.AlbumArtistSort;
+ track.AlbumMusicBrainzId = song.AlbumMusicBrainzId;
+ track.AlbumTitle = song.AlbumTitle;
+ track.AlbumTitleSort = song.AlbumTitleSort;
+ track.ArtistMusicBrainzId = song.ArtistMusicBrainzId;
+ track.ArtistName = song.ArtistName;
+ track.ArtistNameSort = song.ArtistNameSort;
+ track.BitRate = song.BitRate;
+ track.BitsPerSample = song.BitsPerSample;
+ track.Bpm = song.Bpm;
+ track.CacheEntryId = song.CacheEntryId;
+ track.CacheModelId = song.CacheModelId;
+ track.CanPlay = song.CanPlay;
+ track.CanSaveToDatabase = song.CanSaveToDatabase;
+ track.Comment = song.Comment;
+ track.Composer = song.Composer;
+ track.Conductor = song.Conductor;
+ track.Copyright = song.Copyright;
+ track.DateAdded = song.DateAdded;
+ track.DiscCount = song.DiscCount;
+ track.DiscNumber = song.DiscNumber;
+ track.Duration = song.Duration;
+ track.Uri = song.Uri;
+ track.TrackTitle = song.TrackTitle;
+ return track;
+ }
+
+ private void OnRequestNextTrack (PlayerEventArgs args)
+ {
+ this.Next (true, true);
+ }
+
+ public static void Create (DoubanFMSource doubanfm)
+ {
+ if (doubanfm != null) {
+ DoubanOfflineFMSource local_source = new DoubanOfflineFMSource ();
+ doubanfm.AddChildSource (local_source);
+ }
+ }
+
+
+ public override void Activate ()
+ {
+ base.Activate ();
+ }
+
+ #region Implement of IBasicPlaybackController
+ public bool First ()
+ {
+ this.current_paly_index = 0;
+ return this.Next (true, true);
+ }
+
+ public bool Next (bool restart, bool changeImmediately)
+ {
+ if (this.current_paly_index < this.Count) {
+ ServiceManager.PlayerEngine.OpenPlay (this.TrackModel [this.current_paly_index]);
+ this.current_paly_index++;
+ } else {
+ this.current_paly_index = 0;
+ return false;
+ }
+ return true;
+ }
+
+ public bool Previous (bool restart)
+ {
+ if (this.current_paly_index > 0) {
+ this.current_paly_index--;
+ return this.Next (restart, true);
+ }
+ return false;
+ }
+ #endregion
+ }
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/Service/DoubanFMServiceImp.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/Service/DoubanFMServiceImp.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/Service/DoubanFMServiceImp.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/Service/DoubanFMServiceImp.cs 2012-09-10 09:33:31.000000000 +0200
@@ -45,6 +45,12 @@
this.channel_changed (channel.ID);
}
});
+ EventBus.Instance.DoubanFMRateEvent += new DoubanFMRateHandler ((object sender,DoubanFMRateEventArgs e) =>
+ {
+ if (this.song_status_changed != null) {
+ this.song_status_changed (this.GetPlayingSong ());
+ }
+ });
}
public DoubanFMSongStruct GetPlayingSong ()
@@ -127,6 +133,13 @@
remove{ channel_changed -= value;}
}
+ private event SongStatusChangedHandler song_status_changed;
+
+ public event SongStatusChangedHandler SongStatusChanged {
+ add{ song_status_changed += value;}
+ remove{ song_status_changed -= value;}
+ }
+
public DoubanFMChannelStruct[] GetChannelList ()
{
List<DoubanFMChannelStruct> channels = new List<DoubanFMChannelStruct> ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/Service/IDoubanFMService.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/Service/IDoubanFMService.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Banshee.DoubanFM/Service/IDoubanFMService.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Banshee.DoubanFM/Service/IDoubanFMService.cs 2012-09-10 09:33:31.000000000 +0200
@@ -37,6 +37,8 @@
IDictionary changed_properties,
string[] invalidated_properties);
+ public delegate void SongStatusChangedHandler (DoubanFMSongStruct song);
+
public struct DoubanFMChannelStruct
{
public string Name;
@@ -56,6 +58,7 @@
public interface IDoubanFMService
{
event ChannelChangedHandler ChannelChanged;
+ event SongStatusChangedHandler SongStatusChanged;
void Love ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/DoubanFM.csproj new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/DoubanFM.csproj
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/DoubanFM.csproj 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/DoubanFM.csproj 2012-09-10 09:33:31.000000000 +0200
@@ -69,6 +69,7 @@
<Reference Include="dbus-sharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5675b0c3093115b5">
<Private>False</Private>
</Reference>
+ <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="DoubanFM.addin.xml">
@@ -86,6 +87,9 @@
<EmbeddedResource Include="Resources\UI.xml">
<LogicalName>UI.xml</LogicalName>
</EmbeddedResource>
+ <EmbeddedResource Include="Resources\doubanfm_like.png">
+ <LogicalName>doubanfm_like.png</LogicalName>
+ </EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Include="Banshee.DoubanFM\DoubanFMSource.cs" />
@@ -110,6 +114,7 @@
<Compile Include="Banshee.DoubanFM\Service\IDoubanFMService.cs" />
<Compile Include="Banshee.DoubanFM\Service\DoubanFMDBusService.cs" />
<Compile Include="Banshee.DoubanFM\Service\DoubanFMServiceImp.cs" />
+ <Compile Include="Banshee.DoubanFM\OfflineFM\DoubanOfflineFMSource.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
@@ -132,5 +137,6 @@
<Folder Include="Banshee.DoubanFM\" />
<Folder Include="Resources\" />
<Folder Include="Banshee.DoubanFM\Service\" />
+ <Folder Include="Banshee.DoubanFM\OfflineFM\" />
</ItemGroup>
</Project>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Makefile.am new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Makefile.am
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Makefile.am 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Makefile.am 2012-09-10 09:33:31.000000000 +0200
@@ -17,6 +17,7 @@
Banshee.DoubanFM/EventBus.cs \
Banshee.DoubanFM/HTTPUtils.cs \
Banshee.DoubanFM/IDoubanFMPlayQueue.cs \
+ Banshee.DoubanFM/OfflineFM/DoubanOfflineFMSource.cs \
Banshee.DoubanFM/Service/DoubanFMDBusService.cs \
Banshee.DoubanFM/Service/DoubanFMServiceImp.cs \
Banshee.DoubanFM/Service/IDoubanFMService.cs \
@@ -30,6 +31,7 @@
gtk-gui/gui.stetic \
Resources/doubanfm.png \
Resources/doubanfm_banner.jpg \
+ Resources/doubanfm_like.png \
Resources/UI.xml
include $(top_srcdir)/build/build.mk
Files old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/Resources/doubanfm_like.png and new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/Resources/doubanfm_like.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Captcha.cs 2012-09-10 09:33:31.000000000 +0200
@@ -7,7 +7,7 @@
private global::Gtk.Image captchaimage;
private global::Gtk.Entry captchatext;
private global::Gtk.Button buttonOk;
-
+
protected virtual void Build ()
{
global::Stetic.Gui.Initialize (this);
@@ -66,7 +66,7 @@
this.Child.ShowAll ();
}
this.DefaultWidth = 364;
- this.DefaultHeight = 200;
+ this.DefaultHeight = 213;
this.buttonOk.HasDefault = true;
this.Show ();
this.buttonOk.Clicked += new global::System.EventHandler (this.OnButtonOkClicked);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/Banshee.DoubanFM.Configuration.cs 2012-09-10 09:33:31.000000000 +0200
@@ -11,7 +11,7 @@
private global::Gtk.Entry username;
private global::Gtk.Button buttonCancel;
private global::Gtk.Button buttonOk;
-
+
protected virtual void Build ()
{
global::Stetic.Gui.Initialize (this);
@@ -113,7 +113,7 @@
this.Child.ShowAll ();
}
this.DefaultWidth = 309;
- this.DefaultHeight = 153;
+ this.DefaultHeight = 171;
this.buttonOk.HasDefault = true;
this.Show ();
this.buttonCancel.Pressed += new global::System.EventHandler (this.OnButtonCancelPressed);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/generated.cs new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/generated.cs
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/generated.cs 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/generated.cs 2012-09-10 09:33:31.000000000 +0200
@@ -5,7 +5,7 @@
internal class Gui
{
private static bool initialized;
-
+
internal static void Initialize (Gtk.Widget iconRenderer)
{
if ((Stetic.Gui.initialized == false)) {
@@ -13,7 +13,7 @@
}
}
}
-
+
internal class IconLoader
{
public static Gdk.Pixbuf LoadIcon (Gtk.Widget widget, string name, Gtk.IconSize size)
@@ -47,14 +47,14 @@
}
}
}
-
+
internal class ActionGroups
{
public static Gtk.ActionGroup GetActionGroup (System.Type type)
{
return Stetic.ActionGroups.GetActionGroup (type.FullName);
}
-
+
public static Gtk.ActionGroup GetActionGroup (string name)
{
return null;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/gui.stetic new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/gui.stetic
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/gtk-gui/gui.stetic 2012-05-11 09:30:21.000000000 +0200
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/gtk-gui/gui.stetic 2012-09-10 09:33:31.000000000 +0200
@@ -164,7 +164,7 @@
</widget>
</child>
</widget>
- <widget class="Gtk.Dialog" id="Banshee.DoubanFM.Captcha" design-size="364 213">
+ <widget class="Gtk.Dialog" id="Banshee.DoubanFM.Captcha" design-size="364 215">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="Title" translatable="yes">Please input verification code</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/test_dbus.py new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/test_dbus.py
--- old/pro711-banshee-doubanfm-18ba48f65d87/src/DoubanFM/test_dbus.py 1970-01-01 01:00:00.000000000 +0100
+++ new/pro711-banshee-doubanfm-44400efeb772/src/DoubanFM/test_dbus.py 2012-09-10 09:33:31.000000000 +0200
@@ -0,0 +1,26 @@
+#!/usr/bin/python2
+import dbus
+from dbus.mainloop.glib import DBusGMainLoop
+import gobject
+
+def on_channel_changed(channel):
+ print("Channel changed to {0}".format(channel))
+
+def on_song_status_changed(song):
+ print(song)
+
+if __name__=="__main__":
+ loop=gobject.MainLoop()
+ dbus_loop=DBusGMainLoop(set_as_default=True)
+ bus = dbus.SessionBus()
+ proxy = bus.get_object('fm.douban.banshee',
+ '/fm/douban/banshee')
+ doubanfm_iface=dbus.Interface(proxy,dbus_interface="fm.douban.banshee")
+ print("Test Change Channel")
+ doubanfm_iface.ChangeChannel("-3")
+ print("Test Get Channel List")
+ print(doubanfm_iface.GetChannelList())
+ print("Test Signal")
+ doubanfm_iface.connect_to_signal("ChannelChanged",on_channel_changed)
+ doubanfm_iface.connect_to_signal("SongStatusChanged",on_song_status_changed)
+ loop.run()
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org