guo-yu / douban.fm

a tiny and smart cli player of douban.fm in Node.js
MIT License
1.6k stars 210 forks source link

osx 10.9.3 无法更新id3 #103

Open wr1241 opened 10 years ago

wr1241 commented 10 years ago

好像是douban.fm.history.json文件一直都没有生成过。

ffmpeg是用homebrew安装的,所有选项都添加了。

其他使用都正常。

mervinkid commented 10 years ago

我这里也从来没生成过douban.fm.history.json。 我的环境也是OS X 10.9.3 用MacPorts 安装的nodejs,所有依赖都是自动安装的,没出现无法更新的问题。 最好能把相关错误信息贴上来看看。

wr1241 commented 10 years ago

抱歉,我不懂怎么打印错误信息。 就终端的输出来看是这样的:[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行总是没有执行过。

wr1241 commented 10 years ago

补充一下,我修改了sdk.js里24、27、35三行的输出,发现本地音乐和更新id3的错误提示来自27行。 推测是因为读不到history文件。

mervinkid commented 10 years ago

我刚才看了一下,不是因为isValidSong变量为false, 156行运行了,但是抛出异常了。 作者将配置文件的读写操作交给了自己编写的fsplus模块, 上一个版本0.1.6创建douban.fm.profile.json会报错是由于没有判断文件是否存在直接交给fsplus去处理,导致没有找到文件fsplus的writeJSONSync方法抛出异常。 history的操作也是交给fsplus,我现在还没有继续定位,可能和上一个版本对douban.fm.profile.json操作的问题类似。

mervinkid commented 10 years ago

作者的fslus模块是自己对node.js的fs模块的扩展,作者的意思是这个模块以后会被其他程序依赖,为了方便跟踪错误,不会让它更新文件的方法在没有找到文件的时候自动创建文件,那么需要douban.fm自己先判断文件的合法性。

wr1241 commented 10 years ago

多谢指点!我弄好了! 首先fm.js第156行,this指的是Player,应该改为self指向Fm。 然后自己在~下建立一个.douban.fm.history.json文件。 最后写一个{}进去。

哦耶! 我用node-inspector在chrome里点点点啊。。。

调用堆栈看不懂,怎么都是匿名的。。。

wr1241 commented 10 years ago

希望作者加入一个功能: 在切换下一首时,判断本地缓存歌曲是不是下载完整了,如果不完整,则删除。

感谢作者的辛勤劳动!

guo-yu commented 10 years ago

目前人在外地,不经常有网络连接,我先标记一个 bug ~

iamgqb commented 10 years ago

如 @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