const app = getApp(); const { getBanner, listByDevice } = require('../../utils/api.js'); import timeUtil from '../../utils/time_util.js'; import strings from '../../utils/strings.js'; import store from '../../utils/store.js'; import route_constant from '../../utils/route_constant.js'; import route_util from '../../utils/route_util.js'; /// 乐鑫相关 import lexin_util from '../../utils/lexin/util.js'; import lexin_jump from '../../utils/lexin/jump.js'; import lexin_add from '../../utils/lexin/add.js'; import lexin_scan from '../../utils/lexin/scan.js'; import lexin_subscribe from '../../utils/lexin/subscribe.js'; import lexin_connect from '../../utils/lexin/connect.js'; import lexin_message from '../../utils/lexin/message.js'; import { BtHelper } from '../../devices/bt_helper.js'; Page({ data: { nvabarData: { showCapsule: 0, //是否显示左上角图标 1表示显示 0表示不显示 title: 'OhPlay', //导航栏 中间的标题 }, ///下午好 isLogin: false, greeting: "", bannerList: [{ "pic": "https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20241028142233669038262.png" }, { "pic": "https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20240823145816541223911.png" } ], autoplay: true, interval: 3000, // 切换时间间隔 duration: 500, // 滑动动画时长 circular: true, // 衔接滑动 indexPage: 0, ///是否展示频道 showChannel: false, ////首页 navBarHeight: app.globalData.navBarHeight, MenuButtonheight: app.globalData.MenuButtonheight, MenuButtonTop: app.globalData.MenuButtonTop, actionIndex: null, luoma: ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", " Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ", "Ⅺ", "Ⅻ"], channelData: [], isOneLoading: true, uid: null, isSetWake: false, battery: 4, // 0≤电量<20,0格 ////我的界面 loginStatus: true, nickName: "未登录", userPic: './../../img/head_pic.png', intervalId: null, /// 是否第一次自动连接过 autoConnected: false, intervalId1: null, intervalId2: null, deviceMacId: null, deviceListSelect: null, deviceList: [], connectDeviceIding: "", }, onLoad(options) { var that = this; that.onDeviceLoad(); that.onUserInfoLoad(); that.onBannerLoad(); }, onShow() { var that = this; that.onBannerShow(); }, onDeviceLoad() { var that = this; var deviceList = store.getStore("deviceList"); if (!strings.isEmpty(deviceList)) { that.updateDeviceList(deviceList, true, false); } ///监听蓝牙设备 BtHelper.getInstance().initBluetoothAdapter(); BtHelper.getInstance().getBluetoothDevices(); BtHelper.getInstance().startScan(null, null, null); var isFirst = true; ///再秒再对比一次 that.stopIntervalId1(); that.data.intervalId1 = setInterval(async function () { isFirst = false; that.compareList(); }, isFirst ? 6 * 1000 : 12 * 1000); }, /// 对比蓝牙数据 compareList() { var that = this; lexin_scan.compareList(function (list) { that.updateDeviceList(list, false, false); }, function (item) { that.addBlueDevice(item); }); }, // 回调 mqttCallback(type, option) { // console.log("gadsfadsfadsfa==888===" + type); var that = this; let payloads = null; if (option && option.payload) { payloads = JSON.parse(option.payload); }; switch (type) { ///先走订阅 case "connect": lexin_subscribe.subscribeAllDevice(); break; ///再走有在线 case "message_onoffline": lexin_connect.searchOnlineDevice(payloads, function (list) { that.updateDeviceList(list, false, false); }, function () { that.setData({ actionIndex: null, deviceListSelect: null, }); }); break; // PlayState: ///播放状态:0默认状态,1播放状态,2暂停状态, 3停止状态,4缓冲状态。 case "message": if (payloads) { var payloadType = payloads.type; var other = payloads.other; ///获取频道位置 if (payloadType === "get_position" && other) { lexin_message.getPosition(other, function (actionIndex) { that.setData({ actionIndex: actionIndex, }); }); } // 获取歌曲信息 else if (payloadType === "get_dev_info" && other) { that.setDeviceInfor(other); lexin_message.getDeviceInfo(payloads); } ///获取电量 else if (payloadType === "battery" && other) { var battery = lexin_message.getDeviceInfo(other.battery); that.setData({ battery: battery, }); } ///获取播放状态 else if (payloadType === "play" || payloadType === "play_state") { lexin_message.getPlay(); } } break; default: } }, ///去连接设备数据 actionDevice(device) { var that = this; // 取消订阅 var deviceMacId = that.data.deviceMacId; if (!strings.isEmpty(deviceMacId)) { var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId); app.unsubscribe(pubResponse); }; var deviceId = device.deviceId; deviceMacId = lexin_util.getDeviceMacId(deviceId); that.setData({ deviceMacId: deviceMacId, }); that.subscribeCurrDevice(device); }, ///数据处理 subscribeCurrDevice(device) { var that = this; var isOK = app.globalData.client && app.globalData.client.connected; if (!isOK) { app.connect(); setTimeout(() => { that.subscribeCurrDevice(device); }, 500); return; }; var deviceId = device.deviceId; var deviceMacId = lexin_util.getDeviceMacId(deviceId); const obj = { DstDeviceName: deviceMacId }; /// /AIrSMArT_7cdfa1fd3af0/user/pub_response var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId); app.subscribe(pubResponse); app.PubMsg({ type: "get_dev_info", ...obj }); }, onTapActionMusic(e) { var that = this; var actionIndex = that.data.actionIndex; if (strings.isEmpty(actionIndex)) { return; } var index = e.currentTarget.dataset.index; if (index === actionIndex) { return; }; var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { wx.showToast({ title: '请选择设备', icon: "none" }); return; }; that.setData({ actionIndex: index, }); var channelData = that.getChannelData(); var deviceId = deviceList[deviceListSelect].deviceId; const other = { "url": "", "media_data": "", "user_id": `${app.globalData.userInfo.deviceUid}`, "timestamp": `${Math.round(new Date() / 1000)}`, "channel_id": `${channelData[index].channelNum}`, "order": "", "resource_from": "", "songAlbumID": "", "version": 3, "is_debug": app.globalData.is_debug }; var deviceMacId = lexin_util.getDeviceMacId(deviceId); app.PubMsg({ type: "play", DstDeviceName: deviceMacId, other }); }, getchannelData(clientType) { var that = this; var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { return; }; var deviceId = deviceList[deviceListSelect].deviceId; listByDevice({ clientType: clientType, unShowLoad: true, }).then((res) => { that.setData({ channelData: res }); // 接收设备当前播放状态 var deviceMacId = lexin_util.getDeviceMacId(deviceId); const obj = { DstDeviceName: deviceMacId } app.PubMsg({ type: "get_position", ...obj }); wx.setStorageSync("channelData", res); }) }, ///去频道详情 onTapToChannel() { var that = this; var actionIndex = that.data.actionIndex; if (!strings.isEmpty(actionIndex)) { return; } var channelData = that.getChannelData(); if (channelData.length > actionIndex) { wx.setStorageSync("channelDeta", channelData[that.data.actionIndex]); wx.navigateTo({ url: './../channelDetails/channelDetails' }); } }, onTapIndex(e) { var that = this; var index = e.currentTarget.dataset.index; var indexPage = that.data.indexPage; if (indexPage != index) { that.setData({ indexPage: index, }); } }, onTapLogin() { var that = this; ///退出登录 var isLogin = that.getIsLogin(); if (isLogin) { that.logOut(); return; } route_util.jump(route_constant.login); }, ///退出登录 logOut() { var that = this; wx.removeStorageSync('userInfo'); wx.removeStorageSync('token'); var nickName = "未登录"; var greeting = that.getGreetBuNickName(nickName); that.setData({ isLogin: false, greeting: greeting, nickName: nickName, userPic: "./../../img/head_pic.png", }); var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { return; }; ///有设备在线被选中,则让它不被选择 if (deviceList[deviceListSelect].connectType == 3) { var deviceMacId = that.data.deviceMacId; if (!strings.isEmpty(deviceMacId)) { var pubResponse = lexin_util.getResponseByDeviceMacId(deviceMacId); app.unsubscribe(pubResponse); that.setData({ actionIndex: null, deviceListSelect: null, }); }; } }, ///点击item // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online","ProdModel":"MW-2AX(WIFI-N)","devName":"猫王小王子OTR-X"}] onTapItem(e) { var that = this; var isLogin = that.getIsLogin(); if (!isLogin) { route_util.jump(route_constant.login); return; } var index = e.currentTarget.dataset.index; var device = e.currentTarget.dataset.item; var connectType = device.connectType; var deviceListSelect = that.getDeviceListSelect(); // wifi只支持在线点击 if (connectType == 3 && device.state === "online") { if (index === deviceListSelect) { that.goWake(); } else { that.addWifiDevice(device); } return; } ///去蓝牙连接处理 if (index === deviceListSelect) { route_util.jumpParam('/pages/deviceDetail/detail', JSON.stringify(item)) } else if (device.state === "offline") { console.log("去连接蓝牙") } else { // {"connectType":1,"deviceId":"E4:9F:80:09:40:EC","name":"E4:9F:80:09:40:EC","state":"online","ProdModel":"MW-SR1(4G_WIFI)","devName":"猫王音响x阿基米德 SR1 妙播收音机"} device.name = device.devName; BtHelper.getInstance().connect(device, function (data) { if (data) { that.addBlueDevice(device); } }); } }, // 去唤醒界面 goWake() { var that = this; var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { return }; var device = deviceList[deviceListSelect]; wx.navigateTo({ url: './../deviceWake/deviceWake?deviceId=' + device.deviceId + "&clientType=" + device.ProdModel, }); }, ///删除当前设备 deleteDevice(e) { var that = this; var index = e.currentTarget.dataset.index; wx.showModal({ title: '确定删除?', success: function (res) { if (res.confirm) { var deviceList = that.getDeviceList(); if (deviceList[index].connectType == 3) { that.cancelWifi(index, false); } else { that.cancelBlue(index, false); } } } }); }, ///是否是同一个蓝牙 isTheSameBlue(connectDevice) { var that = this; var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { return false; }; if (deviceList[deviceListSelect].connectType == 3) { return false; } else { if (deviceList[deviceListSelect].deviceId == connectDevice.deviceId) { return true; } else { return false; } } }, ///断开当前的 async cancelCurrent() { var that = this; var deviceList = that.getDeviceList(); var deviceListSelect = that.getDeviceListSelect(); if (deviceListSelect === null || deviceList.length <= deviceListSelect) { return; }; if (deviceList[deviceListSelect].connectType == 3) { await that.cancelWifi(deviceListSelect, true); } else { await that.cancelBlue(deviceListSelect, true); } }, /// 断开蓝牙连接 async cancelBlue(index, onlyCancel) { var that = this; if (onlyCancel) { return; } var deviceList = that.getDeviceList(); var deviceId = deviceList[index].deviceId; ///删除当前设备 deviceList = deviceList.filter((item, i) => { return deviceId !== item.deviceId; }); store.setStore("deviceList", deviceList); that.setData({ deviceListSelect: null, deviceList: deviceList, }); }, /// 断开连接wifi async cancelWifi(index, onlyCancel) { var that = this; var deviceList = that.getDeviceList(); if (index === null || deviceList.length <= index) { return; }; var deviceId = deviceList[index].deviceId; // 取消订阅 var pubResponse = lexin_util.getResponseByDeviceId(deviceId); app.unsubscribe(pubResponse); if (onlyCancel) { return; } deviceList = deviceList.filter((item, i) => { return deviceId !== item.deviceId; }); store.setStore("deviceList", deviceList); that.setData({ deviceList: deviceList, deviceMacId: null, actionIndex: null, deviceListSelect: null, }); }, // 新添加Wifi设备 addWifiDevice(device) { var that = this; var that = this; var isOK = app.globalData.client && app.globalData.client.connected; if (!isOK) { app.connect(); setTimeout(() => { that.addWifiDevice(device); }, 500); return; }; var deviceId = device.deviceId; var addDeviceList = lexin_add.addWifiDevice(device); that.updateDeviceList(addDeviceList, false, false); that.setData({ deviceListSelect: null, connectDeviceIding: deviceId, }); lexin_subscribe.subscribeSingleDevice(deviceId); }, refreshCurrentDevice(device) { var that = this; var deviceList = that.getDeviceList(); var selectIndex = null; for (var i = 0; i < deviceList.length; i++) { if (device.deviceId == deviceList[i].deviceId) { selectIndex = i; break; } } if (selectIndex != null) { var addDeviceList = lexin_add.addWifiDevice(device); that.updateDeviceList(addDeviceList, false, false); that.setData({ autoConnected: true, deviceListSelect: selectIndex, connectDeviceIding: "", }); } }, /// 新添加蓝牙设备 addBlueDevice(device) { var that = this; var addDeviceList = lexin_add.addBlueDevice(device); that.updateDeviceList(addDeviceList, false, false); that.setData({ deviceListSelect: 0, autoConnected: true, }); }, /// 手机关闭蓝牙,所有蓝牙设备离线 closeBlueResetOffline(isInit, closeAllBlue) { var that = this; var deviceList = that.getDeviceList(); that.updateDeviceList(deviceList, isInit, closeAllBlue); }, /// 更新列表排序 updateDeviceList(deviceList, isInit, closeAllBlue) { var that = this; var finalList = lexin_add.updateDeviceList(deviceList, isInit, closeAllBlue); if (!strings.isEmpty(deviceList) || !strings.isEmpty(finalList)) { store.setStore("deviceList", finalList); that.setData({ deviceList: finalList, }); } }, ///点击banner事件 onTapBanner() { var that = this; var item = e.currentTarget.dataset.item; }, ///添加设备 jumpToAddDevice() { var that = this; var isLogin = that.getIsLogin(); if (!isLogin) { route_util.jump(route_constant.login); return; } route_util.jump(route_constant.deviceList); }, // 关于我们 jumpToAboutUs() { lexin_jump.toAboutUs(); }, /// 是否已登录 getIsLogin() { var that = this; var isLogin = that.data.isLogin; return isLogin; }, /// 获取列表数据 getDeviceList() { var that = this; var deviceList = that.data.deviceList; return deviceList; }, ///获取当前选中的 getDeviceListSelect() { var that = this; var deviceListSelect = that.data.deviceListSelect; return deviceListSelect; }, ///获取是否已经第一次连接过 getAutoConnected() { var that = this; var autoConnected = that.data.autoConnected; return autoConnected; }, ///当前正在连接的设备id getConnectDeviceIding() { var that = this; var connectDeviceIding = that.data.connectDeviceIding return connectDeviceIding; }, ///获取频道数据 getChannelData() { var that = this; var channelData = that.data.channelData; return channelData; }, ///设置设备相关信息 setDeviceInfor(other) { var that = this; // 接收设备当前信息 that.getchannelData(other.ProdModel); // 电量 var battery = lexin_message.getDeviceInfo(other.Power); that.setData({ battery: battery, }) // 当前设备木有设置定时 that.setData({ isSetWake: false, }); other.alarm.map((v) => { if (v.enable === "1") { that.setData({ isSetWake: true }); } }); }, ///******************************* 可折叠 ********************************************/// onUserInfoLoad() { var that = this; var userInfo = wx.getStorageSync("userInfo") || ""; if (!strings.isEmpty(userInfo)) { var phone = userInfo.phone; if (!phone) { return; }; var nickName = userInfo.nickname || ""; var greeting = that.getGreetBuNickName(nickName); // 获取缓存的频道数据 var channelData = wx.getStorageSync("channelData") || ""; if (!strings.isEmpty(channelData)) { that.setData({ channelData: channelData, greeting: greeting, nickName: nickName, userPic: userInfo.headUrl || "", isLogin: true, }) } else { that.setData({ greeting: greeting, nickName: nickName, userPic: userInfo.headUrl || "", isLogin: true, }); } } else { var greeting = that.getGreetBuNickName(""); that.setData({ greeting: greeting, }) } }, getGreetBuNickName(nickName) { var greeting = timeUtil.getGreet(); if (nickName != "" && nickName != "未登录") { greeting = greeting + ',' + nickName;; } return greeting; }, onBannerLoad() { var that = this; // var bannerList = wx.getStorageSync("homeBanner") || []; // if (that.data.bannerList.length > 0) { // that.setData({ // bannerList: bannerList // }); // } }, onBannerShow() { var that = this; // getBanner({}).then((res) => { // that.setData({ // bannerList: res // }); // wx.setStorageSync("homeBanner", res); // }) }, stopIntervalId1: function () { var that = this; if (!strings.isEmpty(that.data.intervalId1)) { clearInterval(that.data.intervalId1); that.data.intervalId1 = null; } }, stopIntervalId2: function () { var that = this; if (!strings.isEmpty(that.data.intervalId2)) { clearInterval(that.data.intervalId2); that.data.intervalId2 = null; } }, ///销毁蓝牙 onUnload() { var that = this; that.stopIntervalId1(); that.stopIntervalId2(); if (!strings.isEmpty(that.data.intervalId)) { clearInterval(that.data.intervalId); that.data.intervalId = null; } BtHelper.getInstance().disconnect(); if (app.globalData.client === null) { return; }; app.globalData.client.end(true); app.globalData.client.end(true); app.globalData.client = null; }, })