package com.kedzie.vbox.widget; import java.io.IOException; import java.util.Arrays; import android.app.IntentService; import android.appwidget.AppWidgetManager; import android.content.Intent; import android.util.Log; import com.kedzie.vbox.api.IMachine; import com.kedzie.vbox.api.IVirtualBox; import com.kedzie.vbox.app.Utils; import com.kedzie.vbox.server.Server; import com.kedzie.vbox.server.ServerSQlite; import com.kedzie.vbox.soap.VBoxSvc; /** * Update widgets * @author Marek Kędzierski */ public class UpdateWidgetService extends IntentService { private static final String TAG = "UpdateWidgetService"; public UpdateWidgetService() { super("Update Widget Service"); } @Override protected void onHandleIntent(Intent intent) { int[] widgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); if(widgetIds==null) return; Log.d(TAG, "Updating App Widgets " + Arrays.toString(widgetIds)); for(int widgetId : widgetIds) { String machineName = Provider.loadPref(this, widgetId, Provider.KEY_NAME); if(Utils.isEmpty(machineName)) continue; Server server = loadServer(Long.valueOf(Provider.loadPref(this, widgetId, Provider.KEY_SERVER))); VBoxSvc vboxApi = new VBoxSvc(server); vboxApi.setVBox(vboxApi.getProxy(IVirtualBox.class, Provider.loadPref(this, widgetId, Provider.KEY_VBOX))); IMachine machine = vboxApi.getProxy(IMachine.class, Provider.loadPref(this, widgetId, Provider.KEY_IDREF)); if(Utils.isEmpty(machine.getInterfaceName())) { //check if logged on machine = loginAndFindMachine(vboxApi, machineName); if(machine==null) return; Provider.savePref(this, widgetId, Provider.KEY_IDREF, machine.getIdRef()); Provider.savePref(this, widgetId, Provider.KEY_VBOX, vboxApi.getVBox().getIdRef()); } Utils.cacheProperties(machine); Provider.updateAppWidget(this, widgetId, machine); } } private IMachine loginAndFindMachine(VBoxSvc vboxApi, String machineName) { try { vboxApi.logon(); return vboxApi.getVBox().findMachine(machineName); // for(IMachine m : vboxApi.getVBox().getMachines()) { // if(m.getName().equals(machineName)) // return m; // } } catch (IOException e) { Log.e(TAG, "Error logging on", e); } return null; } private Server loadServer(long id) { ServerSQlite db = new ServerSQlite(this); try { return db.get(id); } finally { db.close(); } } }