package io.evercam.androidapp.dto; import android.util.Log; import org.apache.http.cookie.Cookie; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Locale; import io.evercam.Camera; import io.evercam.EvercamException; public class EvercamCamera { public ImageLoadingStatus loadingStatus = ImageLoadingStatus.not_started; public ArrayList<Cookie> cookies = null; private final String TAG = "EvercamCamera"; private boolean isLocal = false; public Camera camera = null; private int id = -1; private String cameraId = ""; private String name = ""; private String owner = ""; // The user's user name private String realOwner = "";// The owner of camera private boolean canEdit = false; private boolean canDelete = false; private String username = ""; private String password = ""; private String timezone = ""; private String vendor = ""; private String model = ""; private String mac = ""; private String externalSnapshotUrl = ""; private String internalSnapshotUrl = ""; private String externalRtspUrl = ""; private String internalRtspUrl = ""; private String status = ""; private boolean hasCredentials = false; private String thumbnailUrl = ""; // Fields for edit camera private String internalHost = ""; private String externalHost = ""; private int internalHttp = 0; private int internalRtsp = 0; private int externalHttp = 0; private int externalRtsp = 0; public EvercamCamera() { } public EvercamCamera convertFromEvercam(io.evercam.Camera camera) { this.camera = camera; try { cameraId = camera.getId(); name = camera.getName(); if(AppData.defaultUser != null) { owner = AppData.defaultUser.getUsername(); } realOwner = camera.getOwner(); canEdit = camera.getRights().canEdit(); canDelete = camera.getRights().canDelete(); if(camera.hasCredentials()) { hasCredentials = true; username = camera.getUsername(); password = camera.getPassword(); } timezone = camera.getTimezone(); vendor = camera.getVendorName(); model = camera.getModelName(); mac = camera.getMacAddress(); externalSnapshotUrl = camera.getExternalJpgUrl(); internalSnapshotUrl = camera.getInternalJpgUrl(); externalRtspUrl = camera.getExternalH264Url(); internalRtspUrl = camera.getInternalH264Url(); if(camera.isOnline()) { status = CameraStatus.ACTIVE; } else { status = CameraStatus.OFFLINE; } internalHost = camera.getInternalHost(); externalHost = camera.getExternalHost(); internalHttp = camera.getInternalHttpPort(); internalRtsp = camera.getInternalRtspPort(); externalHttp = camera.getExternalHttpPort(); externalRtsp = camera.getExternalRtspPort(); thumbnailUrl = camera.getThumbnailUrl(); } catch(EvercamException e) { Log.e(TAG, e.getMessage()); } return this; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStatus() { return status; } public boolean isActive() { if(getStatus().equalsIgnoreCase(CameraStatus.ACTIVE)) { return true; } return false; } public boolean isOffline() { if(getStatus().equalsIgnoreCase(CameraStatus.OFFLINE)) { return true; } return false; } public String getCameraId() { return cameraId; } public String getExternalSnapshotUrl() { return externalSnapshotUrl; } public String getInternalSnapshotUrl() { return internalSnapshotUrl; } public String getName() { return name; } public String getUsername() { return username; } public String getPassword() { return password; } public String getTimezone() { return timezone; } public String getModel() { return model; } public String getVendor() { return vendor; } public String getOwner() { return owner; } public String getRealOwner() { return realOwner; } public boolean canEdit() { return canEdit; } public boolean canDelete() { return canDelete; } public int getCanEditInt() { return canEdit() ? 1 : 0; } public int getCanDeleteInt() { return canDelete() ? 1 : 0; } public boolean hasCredentials() { return hasCredentials; } public int getHasCredentialsInt() { return hasCredentials() ? 1 : 0; } public void setCameraId(String cameraId) { this.cameraId = cameraId; } public void setExternalSnapshotUrl(String externalSnapshotUrl) { this.externalSnapshotUrl = externalSnapshotUrl; } public void setInternalSnapshotUrl(String internalSnapshotUrl) { this.internalSnapshotUrl = internalSnapshotUrl; } public void setName(String name) { this.name = name; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setTimezone(String timezone) { this.timezone = timezone; } public void setModel(String model) { this.model = model; } public void setVendor(String vendor) { this.vendor = vendor; } public void setOwner(String owner) { this.owner = owner; } public void setRealOwner(String realOwner) { this.realOwner = realOwner; } public void setCanEdit(boolean canEdit) { this.canEdit = canEdit; } public void setCanDelete(boolean canDelete) { this.canDelete = canDelete; } public String getMac() { return mac; } public void setMac(String mac) { this.mac = mac; } public String getExternalRtspUrl() { return externalRtspUrl; } public String getInternalRtspUrl() { return internalRtspUrl; } public void setExternalRtspUrl(String externalRtspUrl) { this.externalRtspUrl = externalRtspUrl; } public void setInternalRtspUrl(String internalRtspUrl) { this.internalRtspUrl = internalRtspUrl; } public void setStatus(String status) { this.status = status; } public String getCode() { return ""; } public boolean isLocal() { return isLocal; } public void setLocal(boolean isLocal) { this.isLocal = isLocal; } public void setHasCredentials(boolean hasCredentials) { this.hasCredentials = hasCredentials; } public String getInternalHost() { return internalHost; } public String getExternalHost() { return externalHost; } public int getInternalHttp() { return internalHttp; } public int getInternalRtsp() { return internalRtsp; } public int getExternalHttp() { return externalHttp; } public int getExternalRtsp() { return externalRtsp; } public String getJpgPath() { try { // TODO: Wrap this in the wrapper or API response if(!internalSnapshotUrl.isEmpty()) { return new URL(internalSnapshotUrl).getPath(); } else if(!externalSnapshotUrl.isEmpty()) { return new URL(externalSnapshotUrl).getPath(); } } catch(MalformedURLException e) { Log.e(TAG, e.toString()); } return ""; } public String getH264Pash() { try { if(!internalRtspUrl.isEmpty()) { return new URL(internalRtspUrl).getPath(); } else if(!externalRtspUrl.isEmpty()) { return new URL(externalRtspUrl).getPath(); } } catch(MalformedURLException e) { Log.e(TAG, e.toString()); } return ""; } public void setInternalHost(String internalHost) { this.internalHost = internalHost; } public void setExternalHost(String externalHost) { this.externalHost = externalHost; } public void setInternalHttp(int internalHttp) { this.internalHttp = internalHttp; } public void setInternalRtsp(int internalRtsp) { this.internalRtsp = internalRtsp; } public void setExternalHttp(int externalHttp) { this.externalHttp = externalHttp; } public void setExternalRtsp(int externalRtsp) { this.externalRtsp = externalRtsp; } public String getThumbnailUrl() { return thumbnailUrl; } public void setThumbnailUrl(String thumbnailUrl) { this.thumbnailUrl = thumbnailUrl; } public boolean isHikvision() { if(getVendor().toLowerCase(Locale.UK).contains("hikvision")) { return true; } return false; } public boolean hasRtspUrl() { return !getExternalRtspUrl().isEmpty(); } public boolean hasThumbnailUrl() { return getThumbnailUrl() != null && !getThumbnailUrl().isEmpty(); } @Override public boolean equals(Object obj) { if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) return false; EvercamCamera other = (EvercamCamera) obj; if(cameraId.equals(other.cameraId) && externalRtspUrl.equals(other.externalRtspUrl) && internalRtspUrl.equals(other.internalRtspUrl) && externalSnapshotUrl.equals(other .externalSnapshotUrl) && internalSnapshotUrl.equals(other.internalSnapshotUrl) && mac.equals(other.mac) && model.equals(other.model) && name.equals(other.name) && owner.equals(other.owner) && password.equals(other.password) && timezone.equals (other.timezone) && username.equals(other.username) && vendor.equals(other .vendor) && internalHost.equals(other.internalHost) && externalHost.equals(other .externalHost) && internalHttp == other.internalHttp && externalHttp == other .externalHttp && internalRtsp == other.internalRtsp && externalRtsp == other .externalRtsp && realOwner.equals(other.realOwner) && canEdit == other.canEdit && canDelete == other.canDelete) { return true; } return false; } @Override public String toString() { return "EvercamCamera [loadingStatus=" + loadingStatus + ", id=" + id + ", " + "cameraId=" + cameraId + ", name=" + name + ", owner=" + owner + ", " + "realOwner=" + realOwner + ", canEdit=" + canEdit + ", " + "canDelete=" + canDelete + ", username=" + username + ", " + "password=" + password + ", timezone=" + timezone + ", vendor=" + vendor + ", " + "model=" + model + ", mac=" + mac + ", externalSnapshotUrl=" + externalSnapshotUrl + ", internalSnapshotUrl=" + internalSnapshotUrl + ", " + "externalRtspUrl=" + externalRtspUrl + ", internalRtspUrl=" + internalRtspUrl + ", status=" + status + ", hasCredentials=" + hasCredentials + ", " + "internalHost=" + internalHost + ", externalHost=" + externalHost + ", " + "internalHttp=" + internalHttp + ", internalRtsp=" + internalRtsp + ", " + "externalHttp=" + externalHttp + ", externalRtsp=" + externalRtsp + ", " + "thumbnailUrl=" + thumbnailUrl + "]"; } }