package io.evercam.connect;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import java.util.Locale;
import io.evercam.Auth;
import io.evercam.EvercamException;
import io.evercam.Model;
import io.evercam.Vendor;
import io.evercam.connect.db.Camera;
import io.evercam.connect.db.CameraOperation;
import io.evercam.network.query.EvercamQuery;
public class EvercamTask extends AsyncTask<Void, Void, Void>
{
public String username;
public String password;
private String jpgURL;
private String streamURL;
private Camera camera;
CameraOperation cameraOperation;
public EvercamTask(Camera camera, Context ctxt)
{
this.camera = camera;
cameraOperation = new CameraOperation(ctxt);
}
@Override
protected Void doInBackground(Void... arg0)
{
Vendor vendor = null;
try
{
vendor = Vendor.getById(camera.getVendor().toLowerCase(Locale.UK));
}
catch(EvercamException e)
{
Log.e("evercamdiscover", e.getMessage());
}
if(vendor != null)
{
if(!camera.hasUsername())
{
fillDefaultAuth(vendor);
}
fillDefaultURL(vendor);
}
return null;
}
private void fillDefaultAuth(Vendor vendor)
{
try
{
username = EvercamQuery.getDefaultUsernameByVendor(vendor);
password = EvercamQuery.getDefaultPasswordByVendor(vendor);
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "username",
username);
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "password",
password);
}
catch(EvercamException e)
{
Log.e("evercamdiscover", e.getMessage());
}
}
private void fillDefaultURL(Vendor vendor)
{
String vendorId = "";
try
{
jpgURL = EvercamQuery.getDefaultJpgUrlByVendor(vendor);
streamURL = EvercamQuery.getDefaultH264UrlByVendor(vendor);
if(!jpgURL.isEmpty())
{
if(!jpgURL.startsWith("/"))
{
jpgURL = "/" + jpgURL;
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(),
"jpg", jpgURL);
}
}
if(!streamURL.isEmpty())
{
if(!streamURL.startsWith("/"))
{
streamURL = "/" + streamURL;
}
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "h264",
streamURL);
}
}
catch(EvercamException e)
{
Log.e("evercamdiscover", "Exception with get default url " + vendorId + e.getMessage());
}
}
public static String getUsername(String vendorId)
{
try
{
return Model.getDefaultModelByVendorId(vendorId.toLowerCase(Locale.UK)).getDefaults()
.getAuth(Auth.TYPE_BASIC).getUsername();
}
catch(EvercamException e)
{
Log.e("evercamdiscover", "Exception with get default username " + vendorId + e
.getMessage());
}
return "";
}
public static String getPassword(String vendorId)
{
try
{
return Model.getDefaultModelByVendorId(vendorId.toLowerCase(Locale.UK)).getDefaults()
.getAuth(Auth.TYPE_BASIC).getPassword();
}
catch(EvercamException e)
{
Log.e("evercamdiscover", "Exception with get default password" + vendorId + e
.getMessage());
}
return "";
}
/**
* Only used in camera detail page, if camera credentials are empty.
*/
public static void runAuthTaskOnly(CameraDetailActivity detailActivity)
{
new FillAuthOnlyTask(detailActivity).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private static class FillAuthOnlyTask extends AsyncTask<Void, Void, Void>
{
CameraDetailActivity detailActivity;
FillAuthOnlyTask(CameraDetailActivity detailActivity)
{
this.detailActivity = detailActivity;
}
@Override
protected Void doInBackground(Void... params)
{
Camera camera = detailActivity.camera;
CameraOperation cameraOperation = detailActivity.cameraOperation;
String username = getUsername(camera.getVendor());
String password = getPassword(camera.getVendor());
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "username", username);
cameraOperation.updateAttributeString(camera.getIP(), camera.getSsid(), "password", password);
camera.setUsername(username);
camera.setPassword(password);
return null;
}
}
}