package com.kitty.poclient.upnp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.fourthline.cling.controlpoint.ActionCallback;
import org.fourthline.cling.model.action.ActionInvocation;
import org.fourthline.cling.model.message.UpnpResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import com.kitty.poclient.R;
import com.kitty.poclient.activity.LoginActivity;
import com.kitty.poclient.activity.MainActivity;
import com.kitty.poclient.common.Constant;
import com.kitty.poclient.common.MainHandler;
import com.kitty.poclient.common.MymusicManager;
import com.kitty.poclient.common.UpnpApp;
import com.kitty.poclient.common.UpnpHelper;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.dao.AlbumDao;
import com.kitty.poclient.dao.ArtistDao;
import com.kitty.poclient.dao.MusicDao;
import com.kitty.poclient.dao.PackDao;
import com.kitty.poclient.dao.ProductArtistDao;
import com.kitty.poclient.data.VirtualData;
import com.kitty.poclient.db.DBHelper;
import com.kitty.poclient.domain.Album;
import com.kitty.poclient.domain.Artist;
import com.kitty.poclient.domain.Disk;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.domain.Pack;
import com.kitty.poclient.domain.ProductArtist;
import com.kitty.poclient.thread.SyncAsyncTask;
import com.kitty.poclient.util.JsonUtil;
import com.kitty.poclient.util.LoadImageAysnc;
import com.kitty.poclient.util.SingletonUtil;
public class BoxControl {
// 000,new ActionInvocation(
private final String TAG = "BoxControl";
private static int numFailure = 0;
// 1专辑 ,5单曲 ,15主题
public static final int MEDIA_TYPE_ALBUM = 1;
public static final int MEDIA_TYPE_SINGLE = 5;
public static final int MEDIA_TYPE_THEME = 15;
public static final int CLEAR_CACHE_SUCESS = 1;
public static final int CLEAR_CACHE_FAILURE = 2;
public void buyHandler() {
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetNewSyn"));// IsFirstControl
ai.setInput("Controlkey", WatchDog.macAddress);
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.e(TAG, "GetNewSyn failure");
Log.i("content", "not update");
Looper.prepare();
// CustomToast.makeText(UpnpApp.context, "新购数据同步失败:通信异常", 1000).show();
UpnpApp.mainHandler.showAlert(R.string.store_syn_new_music_failure_alert);
// Intent i = new Intent(UpnpApp.context, LoginActivity.class);
// i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// UpnpApp.context.startActivity(i);
Looper.loop();
}
@Override
public void success(ActionInvocation arg0) {
Log.e(TAG, "GetNewSyn success");
String sycontent = (String) arg0.getOutput("SynchoContent").getValue();
Log.i("content", sycontent);
Log.e(TAG, "sycontent=" + sycontent);
SingletonUtil.imagflag = true;
LoadImageAysnc.unlock();
if (sycontent != null && sycontent != "") {
String sysnids = contentHandler1(sycontent);
if (sysnids != "") {
Log.e(TAG, "VirtualData.clearcacheinitData()");
VirtualData.clearcacheinitData();
// VirtualData.initData();
// getCloudStates(5);
buySycontentAfterHandler(sysnids);
WatchDog.clearPurchasingMaps();// 清空正在缓存中的数据
webDetailPageUpdateUI();// 购买详情页刷新界面显示
Message msg = UpnpApp.mainHandler.obtainMessage(MainHandler.SHOW_INFO);
msg.obj = "数据同步完成";
UpnpApp.mainHandler.sendMessage(msg);
}
}
}
});
}
private void webDetailPageUpdateUI() {
UpnpApp.context.sendBroadcast(new Intent("webDetailPageUpdateUIReceiver"));
}
// 购买后发消息处理
public static void buySycontentAfterHandler(String id) {
if (UpnpApp.upnpService != null && UpnpApp.boxControlService != null) {
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("ClearNewSyn"));
ai.setInput("Controlkey", WatchDog.macAddress);
ai.setInput("Synids", id);
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
}
@Override
public void success(ActionInvocation arg0) {
}
});
}
}
public boolean contentHandler(String sycontent) {
// System.out.println("解析数据内容为: "+sycontent);
// String[] objectArray=sycontent.split("*???*");//*???*
// List<String> newStudentNames = new
// ArrayList<String>(sycontent.Split(","));
JSONObject inidbdata = null;
JSONArray artists = null;
JSONArray albumlist = null;
JSONArray musicList = null;
JSONArray technology = null;
JSONArray packlist = null;
Artist artist = null;
Album album = null;
ProductArtist pa = null;
Disk disk = null;
Music music = null;
Pack pack = null;
try {
JSONArray jsonarray = new JSONArray(sycontent);
Log.i("json", jsonarray.length() + "");
for (int i = 0; i < jsonarray.length(); i++) {
inidbdata = jsonarray.getJSONObject(i);
if (inidbdata != null) {
if (!inidbdata.isNull("musiclist")) {
musicList = inidbdata.getJSONArray("musiclist");
}
if (!inidbdata.isNull("artists")) {
artists = inidbdata.getJSONArray("artists");
}
if (!inidbdata.isNull("albumlist")) {
albumlist = inidbdata.getJSONArray("albumlist");
}
if (!inidbdata.isNull("packlist")) {
packlist = inidbdata.getJSONArray("packlist");
}
if (artists != null && artists.length() > 0) {
for (int j = 0; j < artists.length(); j++) { // 获得演出者列表
JSONObject jsonobj = artists.getJSONObject(i);
artist = new Artist();
artist.setId(jsonobj.getLong("id"));
artist.setName(jsonobj.getString("name"));
if (artist.getName() == null || artist.getName() == "") {
artist.setName("未知演出者");
}
artist.setImgUrl(jsonobj.getString("smallimg"));
artist.setFirstChar(jsonobj.getString("firstchar"));
new ArtistDao().insertArtist(artist);
}
}
if (albumlist != null && albumlist.length() > 0) {
for (int k = 0; k < albumlist.length(); k++) {
JSONObject jsonobj = albumlist.getJSONObject(k);
album = new Album();
album.setId(jsonobj.getLong("id"));
album.setName(jsonobj.getString("albumname"));
album.setImgUrl(jsonobj.getString("albumcovers"));
album.setBuytime(jsonobj.getString("buytime"));
if (album.getBuytime() == null || album.getBuytime() == "" || album.getBuytime().equals("null")) {
album.setBuytime("0");
}
String[] artistli = jsonobj.getString("artistids") != null ? jsonobj.getString("artistids").split(",") : null;
if (artistli != null && artistli.length > 0) {
for (String str : artistli) { // 关联专辑下的演出者
pa = new ProductArtist();
pa.setArtistId(Long.parseLong(str));
pa.setProductId(album.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
// / 这里根据不同的情况查找碟 ,最后保存专辑
new AlbumDao().insertAlbum(album);
}
}
if (musicList != null && musicList.length() > 0) {
for (int m = 0; m < musicList.length(); m++) {
JSONObject jsonmusic = musicList.getJSONObject(m);
music = new Music();
music.setId(jsonmusic.getLong("id"));
music.setName(jsonmusic.getString("musicname"));
music.setMediaurl(jsonmusic.getString("mediaurl"));
music.setDiskId(jsonmusic.getLong("disk_id"));
music.setDisk_no(jsonmusic.getString("serial_number"));
music.setFile_size("");
music.setFirstChar(jsonmusic.getString("firstchar"));
music.setPlay_time(jsonmusic.getString("playtime"));
music.setTrack_no(jsonmusic.getString("track_no"));
music.setBuytime(jsonmusic.getString("buytime"));
music.setAlbumId(jsonmusic.getString("albumid"));
music.setDiskName(jsonmusic.getString("diskname"));
JSONArray musicartistli = jsonmusic.getJSONArray("artists");
if (musicartistli != null && musicartistli.length() > 0) {
for (int k = 0; k < musicartistli.length(); k++) {
JSONObject jsonmusicartistli = musicartistli.getJSONObject(k);
pa = new ProductArtist();
pa.setArtistId(jsonmusicartistli.getLong("id"));
pa.setProductId(music.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
new MusicDao().insertMusic(music);
System.gc();
}
}
if (packlist != null && packlist.length() > 0) {
String[] musicids = null;
for (int n = 0; n < packlist.length(); n++) {
JSONObject jsonpack = packlist.getJSONObject(n);
pack = new Pack();
pack.setId(jsonpack.getLong("id"));
pack.setName(jsonpack.getString("name"));
pack.setImgurl(jsonpack.getString("bigimg"));
pack.setBuytime(jsonpack.getString("buytime"));
pack.setLibraryid(jsonpack.getLong("libraryid"));
musicids = jsonpack.getString("musicids") != null ? jsonpack.getString("musicids").split(",") : null;
pack.setMusicids(musicids);
new PackDao().insertPack(pack);
}
}
}
}
} catch (JSONException e) {
// System.out.println("解析的内容为:"+sycontent);
// System.out.println("解析错误");
e.printStackTrace();
} finally {
// System.out.println("解析完毕!");
return true;
}
}
/**
* ken 2013.10.22
*
* @param sycontent
* @return
*/
@SuppressWarnings("finally")
public boolean contentHandler2(String sycontent) {
JSONObject inidbdata = null;
JSONArray arrList = null;
Artist artist = null;
Album album = null;
ProductArtist pa = null;
Music music = null;
Pack pack = null;
try {
JSONArray jsonarray = new JSONArray(sycontent);
Log.i("json", jsonarray.length() + "");
int type = 0;
for (int i = 0; i < jsonarray.length(); i++) {
inidbdata = jsonarray.getJSONObject(i);
if (inidbdata != null) {
if (!inidbdata.isNull("musiclist")) {
type = 1;
arrList = inidbdata.getJSONArray("musiclist");
}
if (!inidbdata.isNull("artists")) {
type = 2;
arrList = inidbdata.getJSONArray("artists");
}
if (!inidbdata.isNull("albumlist")) {
type = 3;
arrList = inidbdata.getJSONArray("albumlist");
}
if (!inidbdata.isNull("packlist")) {
type = 4;
arrList = inidbdata.getJSONArray("packlist");
}
if (arrList != null && arrList.length() > 0) {
switch (type) {
case 1:// musicList
JSONObject jsonmusic = null;
JSONArray musicartistli = null;
JSONObject jsonmusicartistli = null;
for (int m = 0; m < arrList.length(); m++) {
jsonmusic = arrList.getJSONObject(m);
music = new Music();
music.setId(jsonmusic.getLong("id"));
music.setName(jsonmusic.getString("musicname"));
music.setMediaurl(jsonmusic.getString("mediaurl"));
music.setDiskId(jsonmusic.getLong("disk_id"));
music.setDisk_no(jsonmusic.getString("serial_number"));
music.setFile_size("");
music.setFirstChar(jsonmusic.getString("firstchar"));
music.setPlay_time(jsonmusic.getString("playtime"));
music.setTrack_no(jsonmusic.getString("track_no"));
music.setBuytime(jsonmusic.getString("buytime"));
music.setAlbumId(jsonmusic.getString("albumid"));
music.setDiskName(jsonmusic.getString("diskname"));
musicartistli = jsonmusic.getJSONArray("artists");
if (musicartistli != null && musicartistli.length() > 0) {
for (int k = 0; k < musicartistli.length(); k++) {
jsonmusicartistli = musicartistli.getJSONObject(k);
pa = new ProductArtist();
pa.setArtistId(jsonmusicartistli.getLong("id"));
pa.setProductId(music.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
new MusicDao().insertMusic(music);
System.gc();
}
break;
case 2:
JSONObject jsonobj = null;
for (int j = 0; j < arrList.length(); j++) { // 获得演出者列表
jsonobj = arrList.getJSONObject(i);
artist = new Artist();
artist.setId(jsonobj.getLong("id"));
artist.setName(jsonobj.getString("name"));
if (artist.getName() == null || artist.getName() == "") {
artist.setName("未知演出者");
}
artist.setImgUrl(jsonobj.getString("smallimg"));
artist.setFirstChar(jsonobj.getString("firstchar"));
new ArtistDao().insertArtist(artist);
}
break;
case 3:
String[] artistli;
JSONObject json_obj = null;
for (int k = 0; k < arrList.length(); k++) {
json_obj = arrList.getJSONObject(k);
album = new Album();
album.setId(json_obj.getLong("id"));
album.setName(json_obj.getString("albumname"));
album.setImgUrl(json_obj.getString("albumcovers"));
album.setBuytime(json_obj.getString("buytime"));
if (album.getBuytime() == null || album.getBuytime() == "" || album.getBuytime().equals("null")) {
album.setBuytime("0");
}
artistli = json_obj.getString("artistids") != null ? json_obj.getString("artistids").split(",") : null;
if (artistli != null && artistli.length > 0) {
for (String str : artistli) { // 关联专辑下的演出者
pa = new ProductArtist();
pa.setArtistId(Long.parseLong(str));
pa.setProductId(album.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
// / 这里根据不同的情况查找碟 ,最后保存专辑
new AlbumDao().insertAlbum(album);
}
break;
case 4:// packlist
String[] musicids = null;
JSONObject jsonpack = null;
for (int n = 0; n < arrList.length(); n++) {
jsonpack = arrList.getJSONObject(n);
pack = new Pack();
pack.setId(jsonpack.getLong("id"));
pack.setName(jsonpack.getString("name"));
pack.setImgurl(jsonpack.getString("bigimg"));
pack.setBuytime(jsonpack.getString("buytime"));
pack.setLibraryid(jsonpack.getLong("libraryid"));
musicids = jsonpack.getString("musicids") != null ? jsonpack.getString("musicids").split(",") : null;
pack.setMusicids(musicids);
new PackDao().insertPack(pack);
}
break;
}// end switch(type)
}
}
}
} catch (JSONException e) {
e.printStackTrace();
} finally {
return true;
}
}
public synchronized String contentHandler1(String sycontent) {
System.out.println("解析数据内容为: " + sycontent);
JSONObject inidbdata = null;
JSONArray artists = null;
JSONArray albumlist = null;
JSONArray musicList = null;
JSONArray technology = null;
JSONArray packlist = null;
Artist artist = null;
Album album = null;
Disk disk = null;
Music music = null;
Pack pack = null;
String synids = "";
try {
JSONArray jsonarray = new JSONArray(sycontent);
Log.i("json", jsonarray.length() + "");
for (int i = 0; i < jsonarray.length(); i++) {
String synid = null;// 记录每次购买操作id;
String syndata = null;// 每次购买需要同步的数据
inidbdata = jsonarray.getJSONObject(i);
if (inidbdata != null) {
synid = inidbdata.getString("synid");
syndata = inidbdata.getString("syndata");
if (synid != null && syndata != null) {
JSONObject obj = new JSONObject(syndata);
inidbdata = obj;
if (!inidbdata.isNull("musiclist")) {
musicList = inidbdata.getJSONArray("musiclist");
}
if (!inidbdata.isNull("artists")) {
artists = inidbdata.getJSONArray("artists");
}
if (!inidbdata.isNull("albumlist")) {
albumlist = inidbdata.getJSONArray("albumlist");
}
if (!inidbdata.isNull("packlist")) {
packlist = inidbdata.getJSONArray("packlist");
}
if (artists != null && artists.length() > 0) {
for (int j = 0; j < artists.length(); j++) { // 获得演出者列表
JSONObject jsonobj = artists.getJSONObject(j);
artist = new Artist();
artist.setId(jsonobj.getLong("id"));
artist.setName(jsonobj.getString("name"));
if (artist.getName() == null || artist.getName() == "") {
artist.setName("未知演出者");
}
artist.setImgUrl(jsonobj.getString("smallimg"));
artist.setFirstChar(jsonobj.getString("firstchar"));
new ArtistDao().insertArtist(artist);
}
}
if (albumlist != null && albumlist.length() > 0) {
ProductArtist pa = null;
for (int k = 0; k < albumlist.length(); k++) {
JSONObject jsonobj = albumlist.getJSONObject(k);
album = new Album();
album.setId(jsonobj.getLong("id"));
album.setName(jsonobj.getString("albumname"));
album.setImgUrl(jsonobj.getString("albumcovers"));
album.setBuytime(jsonobj.getString("buytime"));
album.setIsCloud(5);
if (album.getBuytime() == null || album.getBuytime() == "" || album.getBuytime().equals("null")) {
album.setBuytime("0");
}
String[] artistli = jsonobj.getString("artistids") != null ? jsonobj.getString("artistids").split(",") : null;
if (artistli != null && artistli.length > 0) {
for (int q = 0; q < artistli.length; q++) {// 关联专辑下的演出者
pa = new ProductArtist();
pa.setArtistId(Long.parseLong(artistli[q]));
pa.setProductId(album.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
// / 这里根据不同的情况查找碟 ,最后保存专辑
new AlbumDao().insertAlbum(album);
}
}
if (musicList != null && musicList.length() > 0) {
ProductArtist pa1 = null;
for (int m = 0; m < musicList.length(); m++) {
JSONObject jsonmusic = musicList.getJSONObject(m);
music = new Music();
music.setId(jsonmusic.getLong("id"));
music.setName(jsonmusic.getString("musicname"));
music.setMediaurl(jsonmusic.getString("mediaurl"));
music.setDiskId(jsonmusic.getLong("disk_id"));
music.setDisk_no(jsonmusic.getString("serial_number"));
music.setFile_size("");
music.setFirstChar(jsonmusic.getString("firstchar"));
music.setPlay_time(jsonmusic.getString("playtime"));
music.setTrack_no(jsonmusic.getString("track_no"));
music.setBuytime(jsonmusic.getString("buytime"));
music.setAlbumId(jsonmusic.getString("albumid"));
music.setDiskName(jsonmusic.getString("diskname"));
music.setIscloud(5);
// JSONArray musicartistli =
// jsonmusic.getJSONArray("artists");
// if (musicartistli != null &&
// musicartistli.length() > 0) {
// for (int k = 0; k < musicartistli.length();
// k++) {
// JSONObject jsonmusicartistli =
// musicartistli.getJSONObject(k);
// pa1 = new ProductArtist();
// pa1.setArtistId(jsonmusicartistli.getLong("id"));
// pa1.setProductId(music.getId());
// new
// ProductArtistDao().insertProductArtist(pa1);
// }
// }
//
String artistidss = "";
if (!jsonmusic.isNull("artistids")) {
artistidss = jsonmusic.getString("artistids");
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
/*
* if (musicartistli != null &&
* musicartistli.length() > 0) { for (int k = 0;
* k < musicartistli.length(); k++) { JSONObject
* jsonmusicartistli =
* musicartistli.getJSONObject(k); pa1 = new
* ProductArtist();
* pa1.setArtistId(jsonmusicartistli
* .getLong("id"));
* pa1.setProductId(music.getId()); new
* ProductArtistDao().insertProductArtist(pa1);
* } }
*/
if (artistidss != null && artistidss != "") {
String[] str = artistidss.split(",");
if (str != null && str.length > 0) {
for (int q = 0; q < str.length; q++) {
pa1 = new ProductArtist();
pa1.setArtistId(Long.parseLong(str[q]));
pa1.setProductId(music.getId());
new ProductArtistDao().insertProductArtist(pa1);
}
}
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
new MusicDao().insertMusic(music);
System.gc();
}
}
if (packlist != null && packlist.length() > 0) {
String[] musicids = null;
for (int n = 0; n < packlist.length(); n++) {
JSONObject jsonpack = packlist.getJSONObject(n);
pack = new Pack();
pack.setId(jsonpack.getLong("id"));
pack.setName(jsonpack.getString("name"));
pack.setImgurl(jsonpack.getString("bigimg"));
pack.setBuytime(jsonpack.getString("buytime"));
pack.setLibraryid(jsonpack.getLong("libraryid"));
pack.setIsCloud(5);
musicids = jsonpack.getString("musicids") != null ? jsonpack.getString("musicids").split(",") : null;
pack.setMusicids(musicids);
new PackDao().insertPack(pack);
}
}
synids = synids + synid + ",";
}
}
}
if (synids != "") {
synids = synids.substring(0, synids.length() - 1);
}
} catch (JSONException e) {
// System.out.println("解析的内容为:" + sycontent);
// System.out.println("解析错误");
e.printStackTrace();
} finally {
return synids;
}
}
public void getBoxHeartBeat() {
Log.e("BUG982", "getBoxHeartBeat()");
ActionInvocation ai = null;
try {
ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetBoxUserInfo"));
} catch (Exception e) {
e.printStackTrace();
Looper.prepare();
// CustomToast.makeText(UpnpApp.context, UpnpApp.context.getString(R.string.errorUpnp), Toast.LENGTH_SHORT).show();
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
Looper.loop();
return;
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void success(ActionInvocation arg0) {
Log.e(TAG, "GetBoxUserInfo>>success");
Log.e("BUG982", "getBoxHeartBeat()>>success");
WatchDog.isBoxAlive = true;
numFailure = 0;
}
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
numFailure++;
Log.e(TAG, "getBoxHeartBeat()>>failure");
Log.e("BUG982", "GetBoxUserInfo>>failure");
if (numFailure < 3) {
getBoxHeartBeat();
} else {
WatchDog.isBoxAlive = false;
numFailure = 0;
}
}
});
}
/**
* 更改本地云信息状态
*
* @param type
* @param oper
* @param ids
*/
public void getCloudStates(int type, int oper, String ids) {
Log.e("BUG975", "10>>"+TAG+"getCloudStates("+type+","+oper+","+ids+")");
/*
* <Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/"><InstanceID
* val="0"><Hassyn
* val="cloudchange:1380191845606,type:1,5,10,ids:11233-754554,oper:1,5"
* /></InstanceID></Event> 说明:type :1专辑 5单曲 15主题 oper:1删除 5同步本地 String
* cloudChange=str[0]; String type=str[1]; String ids=str[2]; String
* oper=str[3];
*/
String[] id = ids.split("-");
Log.i(TAG , "主题BBBBB -------------------------");
Log.i(TAG , "主题BBBBB ids:" + ids);
int locationStateToSet = Constant.LOCATION_STATE_REMOTE;
if (oper == Constant.LOCATION_OPERATION_FETCH) {
locationStateToSet = Constant.LOCATION_STATE_LOCAL;
}
switch (type) {
// 同步云专辑
case 1: {
if (WatchDog.flag) {
new AlbumDao().updateCloudState(id != null ? Long.parseLong(id[0]) : 0, locationStateToSet);
VirtualData.clearcacheinitData();
if (oper == Constant.LOCATION_OPERATION_DELETE) {
// // 2切换到新框架(总共两点)
// // Intent intent = new Intent(UpnpApp.context,
// // MainActivity.class);//old
// Intent intent = new Intent(UpnpApp.context, com.dfim.app.activity.MainActivity.class);// new
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// UpnpApp.context.startActivity(intent);
MymusicManager.tabMusicFragment.back();
MymusicManager.tabMusicFragment.back();
}
} else {
WatchDog.flag = true;
}
break;
}
// 同步云单曲:单曲已经回归本地数据库,但没有专辑可以在专辑列表中显示
case 5: {
new MusicDao().updateMusicState(id, locationStateToSet);
VirtualData.clearcacheinitData();
if (oper == Constant.LOCATION_OPERATION_DELETE) {
MymusicManager.tabMusicFragment.back();
MymusicManager.tabMusicFragment.back();
}
break;
}
// 同步云主题
case 15: {
// new PackDao().updatePackState(id != null ? Long.parseLong(id[0]) : 0, tmp);
/*
* for(int i=0; i< id.length; i++){
Log.i(TAG , "主题BBBBB id[i]:" + id[i]);
}
Log.i(TAG , "主题BBBBB tmp:" + tmp);
new PackDao().updatePackState(id, tmp);
VirtualData.clearcacheinitData();
*/
new BoxControl().getCloudStates(1, null);
break;
}
}
// TabMusicActivity.getCacheInfo();
MymusicManager.getCacheInfo();
if (WatchDog.activity != null) {
WatchDog.activity.finish();
}
}
private void synAlbums(int oper, String[] id, int tmp){
if (WatchDog.flag) {
new AlbumDao().updateCloudState(id != null ? Long.parseLong(id[0]) : 0, tmp);
VirtualData.clearcacheinitData();
if (oper == 1) {
// 2切换到新框架(总共两点)
// Intent intent = new Intent(UpnpApp.context,
// MainActivity.class);//old
Intent intent = new Intent(UpnpApp.context, com.kitty.poclient.activity.MainActivity.class);// new
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UpnpApp.context.startActivity(intent);
}
} else {
WatchDog.flag = true;
}
}
private void synSingles(String[] id, int tmp){
new MusicDao().updateMusicState(id, tmp);
VirtualData.clearcacheinitData();
}
private void synThemes(String[] id, int tmp){
}
/**
* 优化同步云端数据
*/
public void getCloudStates(final int type, final Handler handler) {
/*
* <Event xmlns="urn:schemas-upnp-org:metadata-1-0/AVT/"><InstanceID
* val="0"><Hassyn
* val="cloudchange:1380191845606,type:1,5,10,ids:11233-754554,oper:1,5"
* /></InstanceID></Event> 说明:type :1专辑 5单曲 15主题 oper:1删除 5同步本地 String
* cloudChange=str[0]; String type=str[1]; String ids=str[2]; String
* oper=str[3];
*/
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetCloudState"));
ai.setInput("ControlKey", WatchDog.macAddress);
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.e("BUG982", "GetCloudState>>failure");
VirtualData.initData();
startMainActivity(handler);
}
@Override
public void success(ActionInvocation arg0) {
Log.e("BUG982", "GetCloudState>>success");
Log.i("tongbu", "云信息放回成功!");
WatchDog.clearCacheStateMap.clear();
String sycontent = (String) arg0.getOutput("Json").getValue();
try {
JSONObject ob = new JSONObject(sycontent);
setStateMap("albums", ob);
new AlbumDao().updateCloudStates(WatchDog.clearCacheStateMap);
//专辑 判断专辑是否为空
boolean noAlbum = false;
List<Long> albumIds = WatchDog.clearCacheStateMap.get("albums");
if(albumIds==null || albumIds.size()==0){
noAlbum = true;
}
//单曲
setStateMap("musics", ob);
new MusicDao().updateCloudStates(WatchDog.clearCacheStateMap);
//主题
setStateMap("themes", ob);
new PackDao().updateCloudStates(WatchDog.clearCacheStateMap, noAlbum);
} catch (Exception e) {
e.printStackTrace();
}
VirtualData.clearcacheinitData();
Log.i("tongbu", "同步云信息成功");
Log.i("tongbu", type + "");
if (type != 5) {
startMainActivity(handler);
}
// for (int i = 0; i < 500; i++) {
//
// }
// TabMusicActivity.getCacheInfo();
// MyMusicActivity.getCacheInfo();
MymusicManager.getCacheInfo();
if (WatchDog.activity != null) {
WatchDog.activity.finish();
}
}
});
}
private void startMainActivity(Handler handler) {
// Message msg = handler.obtainMessage();
// msg.arg1 = 99;
// msg.what = LoginActivity.UPGRADE_PROGRESS;
// handler.sendMessage(msg);
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_StartMainActivity, 100);
// 1切换到新框架(总共两点)
// Intent intent = new Intent(UpnpApp.context, MainActivity.class);//old
Intent intent = new Intent(UpnpApp.context, MainActivity.class);// new
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UpnpApp.context.startActivity(intent);
handler.sendEmptyMessage(LoginActivity.SYNC_FINISHED);
}
/**
* ken 2013.10.23
*
* @param tag
* @param ob
* @throws JSONException
*/
private void setStateMap(String tag, JSONObject ob) throws JSONException {
JSONArray marray = ob.getJSONArray(tag);
List<Long> list = new ArrayList<Long>();
if (null != marray && marray.length() > 0 && !marray.getString(0).equals("null")) {
for (int i = 0; i < marray.length(); i++) {
list.add(marray.getLong(i));
}
}
WatchDog.clearCacheStateMap.put(tag, list);
}
/**
* @decription 清除缓存
* @param idStr
* @param type
* 1专辑 ,5单曲 ,15主题
*/
public void clearcache(final String idStr, final int type, final Handler handler) {
Log.i("SinglesCache", "clearcache, BoxControl, type:" + type);
Log.i("SinglesCache", "clearcache, BoxControl, ids:" + idStr);
Log.e("BUG975", "6>>"+TAG+"clearcache("+idStr+","+type+"hanler)");
if (UpnpApp.upnpService != null && UpnpApp.cacheControlService != null) {
ActionInvocation ai = new ActionInvocation(UpnpApp.cacheControlService.getAction("ClearCache"));
/* if (type == 1) {
ai.setInput("CacheURI", "cache://album?id=" + ids);
} else if (type == 5) {
ai.setInput("CacheURI", "cache://music?ids=" + ids);
} else if (type == 15) {
ai.setInput("CacheURI", "cache://theme?id=" + ids);
}*/
switch(type){
case MEDIA_TYPE_ALBUM:
ai.setInput("CacheURI", "cache://album?id=" + idStr);
break;
case MEDIA_TYPE_SINGLE:
ai.setInput("CacheURI", "cache://music?ids=" + idStr);
break;
case MEDIA_TYPE_THEME:
ai.setInput("CacheURI", "cache://theme?id=" + idStr);
break;
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.i("SinglesCache", "clearcache, BoxControl, CLEAR_CACHE_FAILURE");
Message msg = handler.obtainMessage();
msg.what = CLEAR_CACHE_FAILURE;
handler.sendMessage(msg);
}
@Override
public void success(ActionInvocation arg0) {
Log.i("SinglesCache", "clearcache, BoxControl, CLEAR_CACHE_SUCESS");
WatchDog.clearCacheProductType = type;
Message msg = handler.obtainMessage();
msg.what = CLEAR_CACHE_SUCESS;
msg.obj = idStr;
handler.sendMessage(msg);
}
});
}
}
/*
* 通知盒子端同步新购买数据
*/
public void notifyBoxToSyn() {
Log.e(TAG, "notifyBoxToSyn");
ActionInvocation ai = null;
try {
ai = new ActionInvocation(UpnpApp.boxControlService.getAction("NotifyBoxToSyn"));
ai.setInput("ControlKey", WatchDog.macAddress);
} catch (Exception e) {
Looper.prepare();
// CustomToast.makeText(UpnpApp.context, "未能同步:与设备通信失败", Toast.LENGTH_SHORT).show();
UpnpApp.mainHandler.showAlert(R.string.syn_failure);
Looper.loop();
e.printStackTrace();
return;
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.e("BUG982", "NotifyBoxToSyn>>failure");
Log.e(TAG, "notifyBoxToSyn>>failure=" + WatchDog.upnpActionPerformCount);
WatchDog.upnpActionPerformCount++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (WatchDog.upnpActionPerformCount < 3) {
notifyBoxToSyn();
} else {
Looper.prepare();
// CustomToast.makeText(UpnpApp.context, "未能同步:与设备通信失败", Toast.LENGTH_SHORT).show();
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
Looper.loop();
WatchDog.upnpActionPerformCount = 0;
}
}
@Override
public void success(ActionInvocation arg0) {
Log.e(TAG, "notifyBoxToSyn>>success");
Log.e("BUG982", "NotifyBoxToSyn>>success");
WatchDog.hasNewBought = false;
WatchDog.upnpActionPerformCount = 0;
}
});
}
/**
* @decription 同步到本地
* @param ids
* @param type
* 1专辑 ,5单曲 ,15主题
*/
public void synCloud(String ids, final int type) {
if (UpnpApp.upnpService != null && UpnpApp.cacheControlService != null) {
ActionInvocation ai = new ActionInvocation(UpnpApp.cacheControlService.getAction("ClearCache"));
if (type == 1) {
ai.setInput("CacheURI", "cache://album?id=" + ids);
} else if (type == 5) {
ai.setInput("CacheURI", "cache://music?ids=" + ids);
} else if (type == 15) {
ai.setInput("CacheURI", "cache://theme?id=" + ids);
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
}
@Override
public void success(ActionInvocation arg0) {
getCloudStates(type, null);
}
});
}
}
/**
* 增量同步box数据传入libid
*
*/
/* public void asyAddBoxData(final Handler handler, String libid) {
if (libid == "" || libid == null) {
libid = "-1";
}
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetAllUnSyn"));
ai.setInput("Controlkey", WatchDog.macAddress);
// JSONObject jsonOject = new JSONObject();
// try {
// Log.e("GetAllUnSyn", "asyAddBoxData,jsonOject.toString():" + jsonOject.toString());
// jsonOject.put("libarayid", libid);
// jsonOject.put("max", PAGE_NUM);
//
// } catch (JSONException e1) {
// Log.e("GetAllUnSyn", "jsonOject create error:" + e1.getMessage());
// e1.printStackTrace();
// }
ai.setInput("Json", libid);
// ai.setInput("Json", jsonOject.toString());
//TODO 分页同步数据。
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
upnpFailureHandle();
}
@Override
public void success(ActionInvocation arg0) {
String sycontent = (String) arg0.getOutput("SynchoContent").getValue();//接收数据
Log.i("GetAllUnSyn", "sycontent=" + sycontent);
if (sycontent != null && sycontent != "") {
WatchDog.l = System.currentTimeMillis();
if (analyseBoxData(sycontent, handler)) {//解释数据
new BoxControl().getCloudStates(1, handler); //同步云信息
VirtualData.clearcacheinitData(); //获取本地 专辑、单曲和主题 信息
startMainActivity(handler); //链接到新界面 MainActivity
} else {
upnpFailureHandle();
}
try {
Thread.sleep(500L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TabMusicActivity.getCacheInfo();
// MyMusicActivity.getCacheInfo();
MymusicManager.getCacheInfo();
if (WatchDog.activity != null) {
WatchDog.activity.finish();
}
} else {
upnpFailureHandle();
}
}
});
}*/
/**
* 增量同步box数据传入libid (大于或等于-1的整数)
*
*/
public void getPageUnSyn(final Handler handler, final String musicLibid) {
String controlKeyValue = WatchDog.macAddress;
List<Object> values = new ArrayList<Object>();
values.add(musicLibid); // 起始 music library id
values.add(UpnpHelper.GetPageUnSyn_PAGE_NUM); // pageNum
String jsonValue = UpnpHelper.generateJSONObject(UpnpHelper.getKeys_GetPageUnSyn(), values).toString();
ActionInvocation<?> action = UpnpHelper.generateAction_GetPageUnSyn(controlKeyValue, jsonValue);
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(action) {
@Override
@SuppressWarnings("rawtypes")
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
upnpFailureHandle();
}
@Override
@SuppressWarnings("rawtypes")
public void success(ActionInvocation arg0) {
// SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, GetAllUnSynProgress + 0.05);
String sycontent = (String) arg0.getOutput("SynchoContent").getValue();// 接收数据
Log.i("GetPageUnSyn", "sycontent=" + sycontent);
if (sycontent != null && sycontent != "") {
// {"syndata":{},"synid":203}
JSONObject resultJO;
try {
resultJO = new JSONObject(sycontent);
if (!resultJO.getString("syndata").equals("{}")) {
// 解释数据
readDataFrom_GetAllUnSyn(sycontent, handler);
// TODO 处理进度显示
// 循环获取数据
// int nextBeginNum = beginNum + UpnpHelper.GetPageUnSyn_PAGE_NUM;
//TODO 每次要获取最后一首音乐的 musicLibId
Map<String ,Long> musicmap=SyncAsyncTask.getMusicCountAndMaxLibid(DBHelper.getSqLitedatabase());
getPageUnSyn(handler, musicmap.get("musicLibid")+"");
} else {// 完成同步
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 100);
getCloudStates(1, handler); // 同步云信息
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetCloudStates, 100);
VirtualData.clearcacheinitData(); // 获取本地 专辑、单曲和主题 信息
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_InitLocalData, 100);
startMainActivity(handler); // 链接到新界面 MainActivity
}
} catch (JSONException e) {
Log.e(TAG, "error in 解释数据:" + e.getMessage());
e.printStackTrace();
upnpFailureHandle();
}
MymusicManager.getCacheInfo();
if (WatchDog.activity != null) {
WatchDog.activity.finish();
}
} else {
upnpFailureHandle();
}
}
});
}
/**
* 同步所有box数据
*/
/* deprecated on 20140123 by eason
* public void anyBoxData(final Handler handler) {
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetAllSyn"));
ai.setInput("Controlkey", WatchDog.macAddress);
// ai.setInput("Json",productIds);
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
upnpFailureHandle();
}
@Override
public void success(ActionInvocation arg0) {
String sycontent = (String) arg0.getOutput("SynchoContent").getValue();
Log.i("content", sycontent);
if (analyseBoxData(sycontent, handler)) {
getCloudStates(1, handler);
}
}
});
}*/
/**
* 判断是否要同步box数据
* handler 进度条显示控制
*/
// private static double GetAllUnSynProgress = 0;
public void isTrueBoxDate(final Long musicAccount, final Handler handler, final String musicLibid) {
// GetAllUnSynProgress = 0;
// SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, GetAllUnSynProgress + 0.1);
ActionInvocation ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetAllSynCount"));
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.e("BUG982", "GetAllSynCount>>failure");
upnpFailureHandle();
}
@Override
public void success(ActionInvocation arg0) {
Log.e("BUG982", "GetAllSynCount>>success");
String sycontent = (String) arg0.getOutput("SynchoContent").getValue();
try {
JSONObject jobj = new JSONObject(sycontent);
int count = jobj.getInt("count");
if (count != musicAccount && count != 0) {
//<Eason: replace "asyAddBoxData" with "synNewData"
//asyAddBoxData(handler, libid); // 增量同步数据
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 5);
getPageUnSyn(handler, musicLibid);
//>
} else if (musicAccount == count) {
getCloudStates(1, handler);
} else {
upnpFailureHandle();
}
} catch (Exception e) {
upnpFailureHandle();
}
}
});
}
/**
* Replace by readDataFrom_GetAllUnSyn
* 解析box传递过来的所有数据
*/
/*public boolean analyseBoxData(String sycontent, Handler handler) {
JSONObject inidbdata = null;
JSONArray artists = null;
JSONArray albumlist = null;
JSONArray musicList = null;
JSONArray packlist = null;
Artist artist = null;
Album album = null;
Music music = null;
Pack pack = null;
try {
int synid = 0;// 数据库单曲总数
String syndata = null;// 所有数据
inidbdata = new JSONObject(sycontent);
if (inidbdata != null) {
synid = inidbdata.getInt("synid");
syndata = inidbdata.getString("syndata");
if (synid != 0 && syndata != null) {
JSONObject obj = new JSONObject(syndata);
inidbdata = obj;
if (!inidbdata.isNull("musiclist")) {
musicList = inidbdata.getJSONArray("musiclist");
}
if (!inidbdata.isNull("artists")) {
artists = inidbdata.getJSONArray("artists");
}
if (!inidbdata.isNull("albumlist")) {
albumlist = inidbdata.getJSONArray("albumlist");
}
if (!inidbdata.isNull("packlist")) {
packlist = inidbdata.getJSONArray("packlist");
}
//统计数据长度
int dataLength = 0;
int processData = 1;
ArrayList<JSONArray> dataList = new ArrayList<JSONArray>();
dataList.add(musicList);
dataList.add(artists);
dataList.add(albumlist);
dataList.add(packlist);
for(int start=0;start<dataList.size();start++){
JSONArray jsonArray = dataList.get(start);
if (jsonArray != null && jsonArray.length() > 0) {
dataLength += jsonArray.length();
}
Log.i("PersentHandler", "dataLength=" + dataLength);
}
if(dataLength == 0){
countProgress(handler, 1, 1);
}
if (artists != null && artists.length() > 0) {
for (int j = 0; j < artists.length(); j++, processData++) { // 获得演出者列表
JSONObject jsonobj = artists.getJSONObject(j);
artist = new Artist();
artist.setId(jsonobj.getLong("id"));
artist.setName(jsonobj.getString("name"));
if (artist.getName() == null || artist.getName() == "") {
artist.setName("未知演出者");
}
artist.setImgUrl(jsonobj.getString("smallimg"));
artist.setFirstChar(jsonobj.getString("firstchar"));
new ArtistDao().insertArtist(artist);
countProgress(handler, processData, dataLength);
}
Log.i("PersentHandler", "processData=" + processData);
}
if (albumlist != null && albumlist.length() > 0) {
ProductArtist pa = null;
for (int k = 0; k < albumlist.length(); k++,processData++) {
JSONObject jsonobj = albumlist.getJSONObject(k);
album = new Album();
album.setId(jsonobj.getLong("id"));
album.setName(jsonobj.getString("albumname"));
album.setImgUrl(jsonobj.getString("albumcovers"));
album.setBuytime(jsonobj.getString("buytime"));
album.setIsCloud(jsonobj.getInt("showstate") == 0 ? 5 : 0);
if (album.getBuytime() == null || album.getBuytime() == "" || album.getBuytime().equals("null")) {
album.setBuytime("0");
}
String[] artistli = jsonobj.getString("artistids") != null ? jsonobj.getString("artistids").split(",") : null;
if (artistli != null && artistli.length > 0) {
for (String str : artistli) { // 关联专辑下的演出者
pa = new ProductArtist();
pa.setArtistId(Long.parseLong(str));
pa.setProductId(album.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
// / 这里根据不同的情况查找碟 ,最后保存专辑
new AlbumDao().insertAlbum(album);
countProgress(handler, processData, dataLength);
}
Log.i("PersentHandler", "processData=" + processData);
}
if (musicList != null && musicList.length() > 0) {
int handlerTotal = 0;// 发送handlerTotal次数
ProductArtist pa1 = null;
for (int m = 0; m < musicList.length(); m++,processData++) {
JSONObject jsonmusic = musicList.getJSONObject(m);
music = new Music();
music.setId(jsonmusic.getLong("id"));
music.setName(jsonmusic.getString("musicname"));
music.setMediaurl(jsonmusic.getString("mediaurl"));
music.setDiskId(jsonmusic.getLong("disk_id"));
music.setDisk_no(jsonmusic.getString("serial_number"));
music.setFile_size("");
music.setLibid(jsonmusic.getLong("libraryid"));
music.setFirstChar(jsonmusic.getString("firstchar"));
music.setPlay_time(jsonmusic.getString("playtime"));
music.setTrack_no(jsonmusic.getString("track_no"));
music.setBuytime(jsonmusic.getString("buytime"));
music.setAlbumId(jsonmusic.getString("albumid"));
music.setDiskName(jsonmusic.getString("diskname"));
music.setIscloud(jsonmusic.getInt("showstate") == 0 ? 5 : 0);
String artistidss = "";
if (!jsonmusic.isNull("artistid")) {
artistidss = jsonmusic.getString("artistid");
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
if (artistidss != null && artistidss != "") {
String[] str = artistidss.split(",");
if (str != null && str.length > 0) {
for (int q = 0; q < str.length; q++) {
pa1 = new ProductArtist();
pa1.setArtistId(Long.parseLong(str[q]));
pa1.setProductId(music.getId());
new ProductArtistDao().insertProductArtist(pa1);
}
}
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
new MusicDao().insertMusic(music);
countProgress(handler, processData, dataLength);
}
Log.i("PersentHandler", "processData=" + processData);
}
if (packlist != null && packlist.length() > 0) {
String[] musicids = null;
for (int n = 0; n < packlist.length(); n++,processData++) {
JSONObject jsonpack = packlist.getJSONObject(n);
pack = new Pack();
pack.setId(jsonpack.getLong("id"));
pack.setName(jsonpack.getString("name"));
pack.setImgurl(jsonpack.getString("bigimg"));
pack.setBuytime(jsonpack.getString("buytime"));
pack.setIsCloud(jsonpack.getInt("showstate") == 0 ? 5 : 0);
// pack.setLibraryid(jsonpack.getLong("libraryid"));
pack.setLibraryid(0L);// 同步盒子没有没有库id,默认为0
musicids = jsonpack.getString("musicids") != null ? jsonpack.getString("musicids").split(",") : null;
pack.setMusicids(musicids);
new PackDao().insertPack(pack);
countProgress(handler, processData, dataLength);
}
Log.i("PersentHandler", "processData=" + processData);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
return false;
}
return true;
}*/
/**
* 解析box传递过来的所有数据
* @throws JSONException
*/
public boolean readDataFrom_GetAllUnSyn(String sycontent, Handler handler) throws JSONException {
JSONObject inidbdata = null;
JSONArray artists = null;
JSONArray albumlist = null;
JSONArray musicList = null;
JSONArray packlist = null;
Artist artist = null;
Album album = null;
Music music = null;
Pack pack = null;
// try {
int synid = 0;// 数据库单曲总数
String syndata = null;// 所有数据
inidbdata = new JSONObject(sycontent);
if (inidbdata != null) {
synid = inidbdata.getInt("synid");
syndata = inidbdata.getString("syndata");
if (synid != 0 && syndata != null) {
JSONObject obj = new JSONObject(syndata);
inidbdata = obj;
if (!inidbdata.isNull("musiclist")) {
musicList = inidbdata.getJSONArray("musiclist");
}
if (!inidbdata.isNull("artists")) {
artists = inidbdata.getJSONArray("artists");
}
if (!inidbdata.isNull("albumlist")) {
albumlist = inidbdata.getJSONArray("albumlist");
}
if (!inidbdata.isNull("packlist")) {
packlist = inidbdata.getJSONArray("packlist");
}
//统计数据长度
int dataLength = 0;
int processData = 1;
ArrayList<JSONArray> dataList = new ArrayList<JSONArray>();
dataList.add(musicList);
dataList.add(artists);
dataList.add(albumlist);
dataList.add(packlist);
for(int start=0;start<dataList.size();start++){
JSONArray jsonArray = dataList.get(start);
if (jsonArray != null && jsonArray.length() > 0) {
dataLength += jsonArray.length();
}
Log.i("PersentHandler", "dataLength=" + dataLength);
}
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 1);
if (artists != null && artists.length() > 0) {
for (int j = 0; j < artists.length(); j++, processData++) { // 获得演出者列表
JSONObject jsonobj = artists.getJSONObject(j);
artist = new Artist();
artist.setId(jsonobj.getLong("id"));
artist.setName(jsonobj.getString("name"));
if (artist.getName() == null || artist.getName() == "") {
artist.setName("未知演出者");
}
artist.setImgUrl(jsonobj.getString("smallimg"));
artist.setFirstChar(jsonobj.getString("firstchar"));
new ArtistDao().insertArtist(artist);
}
Log.i("PersentHandler", "artists finish, artists.length()=" + artists.length());
}
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 1);
if (albumlist != null && albumlist.length() > 0) {
ProductArtist pa = null;
for (int k = 0; k < albumlist.length(); k++,processData++) {
JSONObject jsonobj = albumlist.getJSONObject(k);
album = new Album();
album.setId(jsonobj.getLong("id"));
album.setName(jsonobj.getString("albumname"));
album.setImgUrl(jsonobj.getString("albumcovers"));
album.setBuytime(jsonobj.getString("buytime"));
album.setIsCloud(jsonobj.getInt("showstate") == 0 ? 5 : 0);
if (album.getBuytime() == null || album.getBuytime() == "" || album.getBuytime().equals("null")) {
album.setBuytime("0");
}
String[] artistli = jsonobj.getString("artistids") != null ? jsonobj.getString("artistids").split(",") : null;
if (artistli != null && artistli.length > 0) {
for (String str : artistli) { // 关联专辑下的演出者
pa = new ProductArtist();
pa.setArtistId(Long.parseLong(str));
pa.setProductId(album.getId());
new ProductArtistDao().insertProductArtist(pa);
}
}
// / 这里根据不同的情况查找碟 ,最后保存专辑
new AlbumDao().insertAlbum(album);
}
Log.i("PersentHandler", "albumlist finish, albumlist.length()=" + albumlist.length());
}
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 1);
if (musicList != null && musicList.length() > 0) {
int handlerTotal = 0;// 发送handlerTotal次数
ProductArtist pa1 = null;
for (int m = 0; m < musicList.length(); m++,processData++) {
JSONObject jsonmusic = musicList.getJSONObject(m);
music = new Music();
music.setId(jsonmusic.getLong("id"));
music.setName(jsonmusic.getString("musicname"));
music.setMediaurl(jsonmusic.getString("mediaurl"));
music.setDiskId(jsonmusic.getLong("disk_id"));
music.setDisk_no(jsonmusic.getString("serial_number"));
music.setFile_size("");
music.setLibid(jsonmusic.getLong("libraryid"));
music.setFirstChar(jsonmusic.getString("firstchar"));
music.setPlay_time(jsonmusic.getString("playtime"));
music.setTrack_no(jsonmusic.getString("track_no"));
music.setBuytime(jsonmusic.getString("buytime"));
music.setAlbumId(jsonmusic.getString("albumid"));
music.setDiskName(jsonmusic.getString("diskname"));
music.setIscloud(jsonmusic.getInt("showstate") == 0 ? 5 : 0);
String artistidss = "";
if (!jsonmusic.isNull("artistid")) {
artistidss = jsonmusic.getString("artistid");
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
if (artistidss != null && artistidss != "") {
String[] str = artistidss.split(",");
if (str != null && str.length > 0) {
for (int q = 0; q < str.length; q++) {
pa1 = new ProductArtist();
pa1.setArtistId(Long.parseLong(str[q]));
pa1.setProductId(music.getId());
new ProductArtistDao().insertProductArtist(pa1);
}
}
} else {
new ProductArtistDao().inserProudctArtistDefault(music.getId());
}
new MusicDao().insertMusic(music);
// countProgress(handler, processData, dataLength);
if( m % 13 == 0){
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 1);
}
}
Log.i("PersentHandler", "musicList finish, musicList.length()=" + musicList.length());
}
if (packlist != null && packlist.length() > 0) {
String[] musicids = null;
for (int n = 0; n < packlist.length(); n++) {
JSONObject jsonpack = packlist.getJSONObject(n);
pack = new Pack();
pack.setId(jsonpack.getLong("id"));
pack.setName(jsonpack.getString("name"));
pack.setImgurl(jsonpack.getString("bigimg"));
pack.setBuytime(jsonpack.getString("buytime"));
pack.setIsCloud(jsonpack.getInt("showstate") == 0 ? 5 : 0);
// pack.setLibraryid(jsonpack.getLong("libraryid"));
pack.setLibraryid(0L);// 同步盒子没有没有库id,默认为0
musicids = jsonpack.getString("musicids") != null ? jsonpack.getString("musicids").split(",") : null;
pack.setMusicids(musicids);
new PackDao().insertPack(pack);
}
Log.i("PersentHandler", "packlist finish, packlist.length()=" + packlist.length());
}
SyncAsyncTask.countProgress(SyncAsyncTask.SYN_TYPE_GetAllUnSyn, 1);
}
}
return true;
}
/* private void countProgress(Handler progressHandler, int processData, int dataLength){
Message msg = progressHandler.obtainMessage();
msg.what = LoginActivity.UPGRADE_PROGRESS;
msg.arg1 = processData*100/dataLength;
// progressHandler.sendMessage(msg);
}*/
/**
* 通知盒子更新云信息
*/
public void notifyBoxUpdateCloud(String ids, final int typeUri) {
if (UpnpApp.upnpService != null && UpnpApp.cacheControlService != null) {
ActionInvocation ai = new ActionInvocation(UpnpApp.cacheControlService.getAction("Syncloud"));
if (typeUri == 1) {
ai.setInput("CacheURI", "cache://album?id=" + ids);
} else if (typeUri == 5) {
ai.setInput("CacheURI", "cache://music?ids=" + ids);
} else if (typeUri == 15) {
ai.setInput("CacheURI", "cache://theme?id=" + ids);
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
if (WatchDog.activity != null) {
WatchDog.activity.finish();
}
}
@Override
public void success(ActionInvocation arg0) {
// getCloudStates(typestate);
if (WatchDog.activity != null) {
WatchDog.activity.finish();// WatchDog.activity=,WatchDog.activity
}
// UpnpApp.showToastMessage("云数据同步成功!");
/**屏蔽后台数据同步消息显示 eshine 20140106
* UpnpApp.mainHandler.showInfo(R.string.cloud_syn_success_info);*/
Log.i(TAG, "云数据同步成功!");
}
});
}
}
/**
* 封装失败处理信息
*/
public void upnpFailureHandle() {
Looper.prepare();
// CustomToast.makeText(UpnpApp.context, "通信异常", 1000).show();
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
// Intent i = new Intent(UpnpApp.context, LoginActivity.class);
// i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// UpnpApp.context.startActivity(i);
Looper.loop();
}
public void getBoxVersion(final LoginActivity loginActivity) {
Log.e("软件升级", TAG+"getBoxVersion()");
ActionInvocation ai = null;
try {
ai = new ActionInvocation(UpnpApp.boxControlService.getAction("GetVersion"));
} catch (Exception e) {
Log.e("0221", TAG+"getBoxVersion():e="+e);
e.printStackTrace();
//对话框提示用户升级盒子
loginActivity.mHandler.sendEmptyMessage(LoginActivity.BOX_VERSION_LOW);
return;
}
UpnpApp.upnpService.getControlPoint().execute(new ActionCallback(ai) {
@Override
public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) {
Log.e("软件升级", TAG+"getBoxVersion()>>failure=" + WatchDog.upnpActionPerformCount);
WatchDog.upnpActionPerformCount++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (WatchDog.upnpActionPerformCount < 3) {
getBoxVersion(loginActivity);
} else {
Looper.prepare();
UpnpApp.mainHandler.showAlert(R.string.network_unnormal_alert);
Looper.loop();
WatchDog.upnpActionPerformCount = 0;
}
}
// 在success中会触发LoginActivity开始同步或显示“盒子版本低”
@Override
public void success(ActionInvocation arg0) {
Log.e("0221", TAG+"getBoxVersion()>>success");
String json=(String) arg0.getOutput("Json").getValue();
Log.e("0221", TAG+"getBoxVersion():json="+json);
new JsonUtil().getBoxVersion(json,loginActivity);
}
});
}
}