/*
* Copyright 2016 Sam Sun <me@samczsun.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.samczsun.skype4j.events.chat.sent;
import com.samczsun.skype4j.chat.Chat;
import com.samczsun.skype4j.events.chat.ChatEvent;
import com.samczsun.skype4j.formatting.Message;
import com.samczsun.skype4j.formatting.Text;
import com.samczsun.skype4j.participants.Participant;
import com.samczsun.skype4j.participants.User;
import javax.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
public class LocationReceivedEvent extends ChatEvent {
private final Participant sender;
private final LocationInfo info;
public LocationReceivedEvent(Chat chat, Participant sender, LocationInfo info) {
super(chat);
this.sender = sender;
this.info = info;
}
public Participant getSender() {
return this.sender;
}
public LocationInfo getLocation() {
return this.info;
}
public static class LocationInfo {
private String base64;
private String text;
private double latitude = Double.NaN;
private double longitude = Double.NaN;
private int zoomLevel = -1;
private String sty; //TODO what is this?
private String ss; //TODO what is this?
public LocationInfo(String parse, String text) throws IllegalArgumentException {
this.base64 = parse;
this.text = text;
try {
String[] args = new String(DatatypeConverter.parseBase64Binary(parse), "UTF-8").split("&");
for (String s : args) {
String[] data = s.split("=");
if (data[0].equalsIgnoreCase("cp")) {
String[] coords = data[1].split("~");
latitude = Double.parseDouble(coords[0]);
longitude = Double.parseDouble(coords[1]);
} else if (data[0].equalsIgnoreCase("lvl")) {
zoomLevel = Integer.parseInt(data[1]);
} else if (data[0].equalsIgnoreCase("sty")) {
sty = data[1];
} else if (data[0].equalsIgnoreCase("ss")) {
ss = data[1];
} else {
throw new IllegalArgumentException("Unknown argument type " + data[0]);
}
}
if (Double.isNaN(latitude) || Double.isNaN(longitude) || zoomLevel == -1 || sty == null || ss == null) {
throw new IllegalArgumentException("Missing certain parameters in args");
}
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException("UTF-8 is not supported by your Java installation");
}
}
public double getLatitude() {
return this.latitude;
}
public double getLongitude() {
return this.longitude;
}
public int getZoomLevel() {
return this.zoomLevel;
}
public String getSty() {
return this.sty;
}
public String getSs() {
return this.ss;
}
public String getText() {
return this.text;
}
public Message toMessage() {
return Message.create().with(Text.rich(this.text).withLink("https://www.bing.com/maps/" + this.base64));
}
}
}