package cn.qylk.media; import java.io.File; import java.io.IOException; import org.json.JSONException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import cn.qylk.LastFm.JsonParser; import cn.qylk.LastFm.Lastfm; import cn.qylk.app.APP; import cn.qylk.app.TrackInfo; import cn.qylk.database.DataBaseService; import cn.qylk.douban.douban; import cn.qylk.utils.BitmapUtils; import cn.qylk.utils.FileHelper; import cn.qylk.utils.StringUtils; import cn.qylk.utils.WebUtils; /** * 歌曲艺术家相关 * * @author qylk2012 */ public class ArtistInfo { public native static boolean ApicFromTag(String artist, String path);// 从tag标签中获取歌词(JNI调用) /** * 歌手生平信息 * * @param artist * @return */ public static String TryToGetInfo(TrackInfo track) { if (track.artist.contains("unknow")) return "未知"; File summaryfile = StringUtils.GetInfosPath(track.title);// 可能采用两种命名方法 File summaryfile2 = StringUtils.GetInfosPath(track.artist); if (summaryfile.exists()) { return new FileHelper().ReadFile(summaryfile); } else if (summaryfile2.exists()) { return new FileHelper().ReadFile(summaryfile2); } else { String sumary = new douban().fetchSummary(track); if (sumary != null) return sumary; else try { sumary = JsonParser.ParseInfo( new Lastfm().ArtistInfoSearch(track.artist), track.artist); new FileHelper().WriteFile(sumary, StringUtils.GetInfosPath(track.artist)); return sumary; } catch (JSONException e0) {// 解析异常 } catch (IOException e) { return "错误"; } } return "无"; } /** * 获取图片 * * @param track * @param icon * 返回小图标 * @return */ public static Bitmap TryToGetPic(TrackInfo track, boolean icon) { boolean local = false; String artist = track.artist; if (track.artist.contains("unknown")) {// 如果艺术家未知,就取歌曲名代替,并且跳过联网下载 artist = track.title; } File path = StringUtils.GetPICPath(artist); if (path.exists())// 查询本地是否存在歌手图片 local = true; else if (ApicFromTag(artist, track.path)) local = true; else if (!icon && DataBaseService.PICIsNotNull(artist) && APP.Config.PicDownloadEnable) { if (webFetchPic(artist)) local = true; } if (local) { if (icon) return BitmapUtils.compress(path.toString()); else return BitmapFactory.decodeFile(path.toString()); } return null; } /** * 下载图片 * * @param artist * @return success? */ private static boolean webFetchPic(String artist) { try { String url = JsonParser.ParsePICUrl(new Lastfm().PICSearch(artist), artist); new FileHelper().WriteFile(WebUtils.FetchFile(url), StringUtils .GetPICPath(artist).toString()); return true; } catch (JSONException e1) { DataBaseService.RecordPICNULL(artist); } catch (IOException e2) { e2.printStackTrace(); } return false; } }