osx 10.9.3 无法更新id3
wr1241 opened this issue · 9 comments
好像是douban.fm.history.json文件一直都没有生成过。
ffmpeg是用homebrew安装的,所有选项都添加了。
其他使用都正常。
我这里也从来没生成过douban.fm.history.json。
我的环境也是OS X 10.9.3 用MacPorts 安装的nodejs,所有依赖都是自动安装的,没出现无法更新的问题。
最好能把相关错误信息贴上来看看。
抱歉,我不懂怎么打印错误信息。
就终端的输出来看是这样的:[Error: 没有找到本地音乐]
频道里的本地电台也是这个输出。
ffmpeg的配置:
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-aacenc --enable-libass --enable-ffplay --enable-libspeex --enable-libschroedinger --enable-libfdk-aac --enable-openssl --enable-libopus --enable-frei0r --enable-libcaca --enable-libquvi --enable-libvidstab --enable-libx265 --enable-libopenjpeg --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5
我不懂怎么调试nodejs,要不也许就能自己搞了。。。
看了一下代码,我怀疑是fm.js的145行那个isValidSong变量总是false,导致156行总是没有执行过。
补充一下,我修改了sdk.js里24、27、35三行的输出,发现本地音乐和更新id3的错误提示来自27行。
推测是因为读不到history文件。
我刚才看了一下,不是因为isValidSong变量为false, 156行运行了,但是抛出异常了。
作者将配置文件的读写操作交给了自己编写的fsplus模块,
上一个版本0.1.6创建douban.fm.profile.json会报错是由于没有判断文件是否存在直接交给fsplus去处理,导致没有找到文件fsplus的writeJSONSync方法抛出异常。
history的操作也是交给fsplus,我现在还没有继续定位,可能和上一个版本对douban.fm.profile.json操作的问题类似。
作者的fslus模块是自己对node.js的fs模块的扩展,作者的意思是这个模块以后会被其他程序依赖,为了方便跟踪错误,不会让它更新文件的方法在没有找到文件的时候自动创建文件,那么需要douban.fm自己先判断文件的合法性。
多谢指点!我弄好了!
首先fm.js第156行,this指的是Player,应该改为self指向Fm。
然后自己在~下建立一个.douban.fm.history.json文件。
最后写一个{}进去。
哦耶!
我用node-inspector在chrome里点点点啊。。。
调用堆栈看不懂,怎么都是匿名的。。。
希望作者加入一个功能:
在切换下一首时,判断本地缓存歌曲是不是下载完整了,如果不完整,则删除。
感谢作者的辛勤劳动!
目前人在外地,不经常有网络连接,我先标记一个 bug ~
如 @wr1241 所说
fm.js 150行左右 this 应该为self
if (isValidSong) {
var updates = {};
updates[song.sid] = song;
try {
fs.updateJSON(self.rc.history, updates); //本来是fs.updateJSON(this.rc.history, updates);
} catch (err) {
// error must be logged in a private place.
}
}
然后在 home下新建 .douban.fm.history.json