change time for osmand bot
This commit is contained in:
parent
04d6e82157
commit
409bada16c
2 changed files with 46 additions and 23 deletions
|
@ -28,6 +28,7 @@ class TelegramHelper private constructor() {
|
||||||
|
|
||||||
private const val DEVICE_PREFIX = "Device: "
|
private const val DEVICE_PREFIX = "Device: "
|
||||||
private const val LOCATION_PREFIX = "Location: "
|
private const val LOCATION_PREFIX = "Location: "
|
||||||
|
private const val LAST_LOCATION_PREFIX = "Last location: "
|
||||||
|
|
||||||
private const val FEW_SECONDS_AGO = "few seconds ago"
|
private const val FEW_SECONDS_AGO = "few seconds ago"
|
||||||
private const val SECONDS_AGO_SUFFIX = " seconds ago"
|
private const val SECONDS_AGO_SUFFIX = " seconds ago"
|
||||||
|
@ -789,51 +790,65 @@ class TelegramHelper private constructor() {
|
||||||
|
|
||||||
private fun parseOsmAndBotLocation(text: String): MessageOsmAndBotLocation {
|
private fun parseOsmAndBotLocation(text: String): MessageOsmAndBotLocation {
|
||||||
val res = MessageOsmAndBotLocation()
|
val res = MessageOsmAndBotLocation()
|
||||||
|
var locationNA = false;
|
||||||
for (s in text.lines()) {
|
for (s in text.lines()) {
|
||||||
when {
|
when {
|
||||||
s.startsWith(DEVICE_PREFIX) -> {
|
s.startsWith(DEVICE_PREFIX) -> {
|
||||||
res.name = s.removePrefix(DEVICE_PREFIX)
|
res.name = s.removePrefix(DEVICE_PREFIX)
|
||||||
}
|
}
|
||||||
s.startsWith(LOCATION_PREFIX) -> {
|
s.startsWith(LOCATION_PREFIX) || s.startsWith(LAST_LOCATION_PREFIX) -> {
|
||||||
val locStr = s.removePrefix(LOCATION_PREFIX)
|
var locStr: String;
|
||||||
|
var parse = true;
|
||||||
|
if (s.startsWith(LAST_LOCATION_PREFIX)) {
|
||||||
|
locStr = s.removePrefix(LAST_LOCATION_PREFIX);
|
||||||
|
if (!locationNA) {
|
||||||
|
parse = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
locStr = s.removePrefix(LOCATION_PREFIX);
|
||||||
|
if (locStr.trim() == "n/a") {
|
||||||
|
locationNA = true;
|
||||||
|
parse = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (parse) {
|
||||||
try {
|
try {
|
||||||
val (latS, lonS) = locStr.split(" ")
|
val (latS, lonS) = locStr.split(" ")
|
||||||
val updatedS = locStr.substring(locStr.indexOf("("), locStr.length)
|
val updatedS = locStr.substring(locStr.indexOf("("), locStr.length)
|
||||||
val timeSecs = parseTime(updatedS.removePrefix("(").removeSuffix(")"))
|
|
||||||
|
res.lastUpdated =
|
||||||
|
(parseTime(updatedS.removePrefix("(").removeSuffix(")")) / 1000).toInt()
|
||||||
res.lat = latS.dropLast(1).toDouble()
|
res.lat = latS.dropLast(1).toDouble()
|
||||||
res.lon = lonS.toDouble()
|
res.lon = lonS.toDouble()
|
||||||
if (timeSecs < messageActiveTimeSec) {
|
|
||||||
res.lastUpdated = (System.currentTimeMillis() / 1000 - timeSecs).toInt()
|
|
||||||
} else {
|
|
||||||
res.lastUpdated = timeSecs
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseTime(timeS: String): Int {
|
private fun parseTime(timeS: String): Long {
|
||||||
try {
|
try {
|
||||||
when {
|
when {
|
||||||
timeS.endsWith(FEW_SECONDS_AGO) -> return 5
|
timeS.endsWith(FEW_SECONDS_AGO) -> return System.currentTimeMillis() - 5000
|
||||||
|
|
||||||
timeS.endsWith(SECONDS_AGO_SUFFIX) -> {
|
timeS.endsWith(SECONDS_AGO_SUFFIX) -> {
|
||||||
val locStr = timeS.removeSuffix(SECONDS_AGO_SUFFIX)
|
val locStr = timeS.removeSuffix(SECONDS_AGO_SUFFIX)
|
||||||
return locStr.toInt()
|
return System.currentTimeMillis() - locStr.toInt() * 1000
|
||||||
}
|
}
|
||||||
timeS.endsWith(MINUTES_AGO_SUFFIX) -> {
|
timeS.endsWith(MINUTES_AGO_SUFFIX) -> {
|
||||||
val locStr = timeS.removeSuffix(MINUTES_AGO_SUFFIX)
|
val locStr = timeS.removeSuffix(MINUTES_AGO_SUFFIX)
|
||||||
val minutes = locStr.toInt()
|
val minutes = locStr.toInt()
|
||||||
return minutes * 60
|
return System.currentTimeMillis() - minutes * 60 * 1000
|
||||||
}
|
}
|
||||||
timeS.endsWith(HOURS_AGO_SUFFIX) -> {
|
timeS.endsWith(HOURS_AGO_SUFFIX) -> {
|
||||||
val locStr = timeS.removeSuffix(HOURS_AGO_SUFFIX)
|
val locStr = timeS.removeSuffix(HOURS_AGO_SUFFIX)
|
||||||
val hours = locStr.toInt()
|
val hours = locStr.toInt()
|
||||||
return hours * 60 * 60
|
return (System.currentTimeMillis() - hours * 60 * 60 * 1000)
|
||||||
}
|
}
|
||||||
timeS.endsWith(UTC_FORMAT_SUFFIX) -> {
|
timeS.endsWith(UTC_FORMAT_SUFFIX) -> {
|
||||||
val locStr = timeS.removeSuffix(UTC_FORMAT_SUFFIX)
|
val locStr = timeS.removeSuffix(UTC_FORMAT_SUFFIX)
|
||||||
|
@ -841,7 +856,7 @@ class TelegramHelper private constructor() {
|
||||||
val date = UTC_DATE_FORMAT.parse(latS)
|
val date = UTC_DATE_FORMAT.parse(latS)
|
||||||
val time = UTC_TIME_FORMAT.parse(lonS)
|
val time = UTC_TIME_FORMAT.parse(lonS)
|
||||||
val res = date.time + time.time
|
val res = date.time + time.time
|
||||||
return res.toInt()
|
return res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|
|
@ -29,6 +29,7 @@ import net.osmand.telegram.utils.OsmandFormatter
|
||||||
import net.osmand.telegram.utils.UiUtils.UpdateLocationViewCache
|
import net.osmand.telegram.utils.UiUtils.UpdateLocationViewCache
|
||||||
import net.osmand.util.MapUtils
|
import net.osmand.util.MapUtils
|
||||||
import org.drinkless.td.libcore.telegram.TdApi
|
import org.drinkless.td.libcore.telegram.TdApi
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
private const val CHAT_VIEW_TYPE = 0
|
private const val CHAT_VIEW_TYPE = 0
|
||||||
private const val LOCATION_ITEM_VIEW_TYPE = 1
|
private const val LOCATION_ITEM_VIEW_TYPE = 1
|
||||||
|
@ -363,11 +364,18 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getListItemLiveTimeDescr(item: ListItem): String {
|
private fun getListItemLiveTimeDescr(item: ListItem): String {
|
||||||
val formattedTime = OsmandFormatter.getFormattedDuration(app, getListItemLiveTime(item))
|
val duration = System.currentTimeMillis() / 1000 - item.lastUpdated
|
||||||
|
var formattedTime = OsmandFormatter.getFormattedDuration(app, duration)
|
||||||
|
if(duration > 48 * 60 * 60) {
|
||||||
|
// TODO make constant
|
||||||
|
formattedTime = Date(item.lastUpdated * 1000.toLong()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return getString(R.string.last_response) + ": $formattedTime " + getString(R.string.time_ago)
|
return getString(R.string.last_response) + ": $formattedTime " + getString(R.string.time_ago)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getListItemLiveTime(item: ListItem): Long = (System.currentTimeMillis() / 1000) - item.lastUpdated
|
|
||||||
|
|
||||||
private fun showPopupMenu(holder: ChatViewHolder, chatId: Long) {
|
private fun showPopupMenu(holder: ChatViewHolder, chatId: Long) {
|
||||||
val ctx = holder.itemView.context
|
val ctx = holder.itemView.context
|
||||||
|
|
Loading…
Reference in a new issue