pars = session.getParms();
int pageIndex = 1;
if (pars.get("page") != null) {
pageIndex = Integer.parseInt(Objects.requireNonNull(pars.get("page")));
}
if (pars.get("pageSize") != null) {
pageSize = Integer.parseInt(Objects.requireNonNull(pars.get("pageSize")));
}
if (pars.get("callsign") != null) {
callsign = Objects.requireNonNull(pars.get("callsign"));
}
if (pars.get("start_date") != null) {
startDate = Objects.requireNonNull(pars.get("start_date"));
}
if (pars.get("end_date") != null) {
endDate = Objects.requireNonNull(pars.get("end_date"));
}
String whereStr = String.format("%%%s%%", callsign);
if (pars.get("exportFile") != null) {
exportFile = Objects.requireNonNull(pars.get("exportFile"));
}
//导出到文件中
if (exportFile.equalsIgnoreCase("CSV")
|| exportFile.equalsIgnoreCase("TXT")) {
return exportSWLMessage(exportFile, callsign, startDate, endDate);
}
HtmlContext.tableBegin(result, false, 0, true).append("\n");
HtmlContext.tableRowBegin(result).append("");
result.append(String.format("%s" +
" , %s "
, callsign, startDate, endDate, GeneralVariables.getStringFromResource(R.string.html_export_csv)
, callsign, startDate, endDate, GeneralVariables.getStringFromResource(R.string.html_export_text)));
Cursor cursor;
StringBuilder dateSql = new StringBuilder();
if (!startDate.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(UTC,1,8)>=\"%s\") "
, startDate.replace("-", "")));
}
if (!endDate.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(UTC,1,8)<=\"%s\") "
, endDate.replace("-", "")));
}
//计算总的记录数
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
"select count(*) as rc from SWLMessages " +
"where ((CALL_TO LIKE ?)OR(CALL_FROM LIKE ?))" + dateSql
, new String[]{whereStr, whereStr});
cursor.moveToFirst();
int pageCount = Math.round(((float) cursor.getInt(cursor.getColumnIndex("rc")) / pageSize) + 0.5f);
if (pageIndex > pageCount) pageIndex = pageCount;
cursor.close();
//查询、每页消息数设定
result.append(String.format("\n"
, 1, pageSize, callsign, startDate, endDate
, pageIndex - 1 == 0 ? 1 : pageIndex - 1, pageSize, callsign, startDate, endDate
, pageIndex
, pageIndex == pageCount ? pageCount : pageIndex + 1, pageSize, callsign, startDate, endDate
, pageCount, pageSize, callsign, startDate, endDate));
result.append(" | ");
HtmlContext.tableRowEnd(result);
HtmlContext.tableEnd(result).append("\n");
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
String.format(
"select * from SWLMessages where ((CALL_TO LIKE ?)OR(CALL_FROM LIKE ?)) " +
dateSql +
" order by ID LIMIT(%d),%d "
, (pageIndex - 1) * pageSize, pageSize), new String[]{whereStr, whereStr});
//result.append("\n");
HtmlContext.tableBegin(result, false, true).append("\n");
HtmlContext.tableRowBegin(result).append("\n");
HtmlContext.tableCellHeader(result, "No.");
HtmlContext.tableCellHeader(result, GeneralVariables.getStringFromResource(R.string.html_protocol));
HtmlContext.tableCellHeader(result, "i3.n3", "UTC", "dB", "Δt");
HtmlContext.tableCellHeader(result, GeneralVariables.getStringFromResource(R.string.html_qsl_freq));
HtmlContext.tableCellHeader(result, GeneralVariables.getStringFromResource(R.string.message));
HtmlContext.tableCellHeader(result, GeneralVariables.getStringFromResource(R.string.html_carrier_frequency_band)).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
int order = 0;
while (cursor.moveToNext()) {
HtmlContext.tableRowBegin(result, true, order % 2 != 0);
int i3 = cursor.getInt(cursor.getColumnIndex("I3"));
int n3 = cursor.getInt(cursor.getColumnIndex("N3"));
String utcTime = cursor.getString(cursor.getColumnIndex("UTC"));
int dB = cursor.getInt(cursor.getColumnIndex("SNR"));
float dt = cursor.getFloat(cursor.getColumnIndex("TIME_SEC"));
int freq = cursor.getInt(cursor.getColumnIndex("FREQ"));
String protocol = cursor.getString(cursor.getColumnIndex("Protocol"));
String callTo = cursor.getString(cursor.getColumnIndex("CALL_TO"));
String callFrom = cursor.getString(cursor.getColumnIndex("CALL_FROM"));
String extra = cursor.getString(cursor.getColumnIndex("EXTRAL"));
long band = cursor.getLong(cursor.getColumnIndex("BAND"));
HtmlContext.tableCell(result, String.format("%d", order + 1 + pageSize * (pageIndex - 1)));
HtmlContext.tableCell(result, protocol, Ft8Message.getCommandInfoByI3N3(i3, n3));
HtmlContext.tableCell(result, utcTime);
HtmlContext.tableCell(result, String.format("%d", dB));
HtmlContext.tableCell(result, String.format("%.1f", dt));
HtmlContext.tableCell(result, String.format("%dHz", freq));
HtmlContext.tableCell(result, String.format("" +
"%s " +
"%s %s", pageSize, callTo.replace("<", "")
.replace(">", "")
, callTo.replace("<", "<")
.replace(">", ">")
, pageSize, callFrom.replace("<", "")
.replace(">", "")
, callFrom.replace("<", "<")
.replace(">", ">"), extra));
HtmlContext.tableCell(result, BaseRigOperation.getFrequencyStr(band)).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
order++;
}
cursor.close();
HtmlContext.tableEnd(result).append("
\n");
//result.append("
");
return newFixedLengthResponse(HtmlContext.HTML_STRING(result.toString()));
//return result.toString();
}
/**
* 把swo的QSO日志导出到文件
*
* @param exportFile 文件名
* @param callsign 呼号
* @param start_date 起始日期
* @param end_date 结束日期
* @return 数据
*/
@SuppressLint("Range")
private Response exportSWLQSOMessage(String exportFile, String callsign, String start_date, String end_date) {
Response response;
StringBuilder fileName = new StringBuilder();
fileName.append("swl_qso");
if (callsign.length() > 0) {
fileName.append("_");
fileName.append(callsign.replace("/", "_")
.replace("\\", "_")
.replace(":", "_")
.replace("?", "_")
.replace("*", "_")
.replace("|", "_")
.replace("\"", "_")
.replace("'", "_")
.replace("<", "_")
.replace(".", "_")
.replace(">", "_"));
}
if (start_date.length() > 0) {
fileName.append(String.format("_%s", start_date));
}
if (end_date.length() > 0) {
fileName.append(String.format("_%s", end_date));
}
fileName.append(".").append(exportFile);
Cursor cursor;
StringBuilder dateSql = new StringBuilder();
if (!start_date.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(qso_date_off,1,8)>=\"%s\") "
, start_date.replace("-", "")));
}
if (!end_date.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(qso_date_off,1,8)<=\"%s\") "
, end_date.replace("-", "")));
}
String whereStr = String.format("%%%s%%", callsign);
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
String.format(
"select * from SWLQSOTable where (([call] LIKE ?)OR(station_callsign LIKE ?)) " +
dateSql +
" order by qso_date desc,time_on desc "), new String[]{whereStr, whereStr});
response = newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "text/plain"
, downQSLTable(cursor, true));
response.addHeader("Content-Disposition"
, String.format("attachment;filename=%s", fileName));
return response;
}
/**
* 查询SWL日志
*
* @param session 会话
* @return html
*/
@SuppressLint({"DefaultLocale", "Range"})
private Response getSWLQsoMessages(IHTTPSession session) {
int pageSize = 100;
String callsign = "";
StringBuilder result = new StringBuilder();
String startDate = "";
String endDate = "";
String exportFile = "";
//读取查询的参数
Map pars = session.getParms();
int pageIndex = 1;
if (pars.get("page") != null) {
pageIndex = Integer.parseInt(Objects.requireNonNull(pars.get("page")));
}
if (pars.get("pageSize") != null) {
pageSize = Integer.parseInt(Objects.requireNonNull(pars.get("pageSize")));
}
if (pars.get("callsign") != null) {
callsign = Objects.requireNonNull(pars.get("callsign"));
}
if (pars.get("start_date") != null) {
startDate = Objects.requireNonNull(pars.get("start_date"));
}
if (pars.get("end_date") != null) {
endDate = Objects.requireNonNull(pars.get("end_date"));
}
String whereStr = String.format("%%%s%%", callsign);
if (pars.get("exportFile") != null) {
exportFile = Objects.requireNonNull(pars.get("exportFile"));
}
//导出到文件中
if (exportFile.equalsIgnoreCase("ADI")) {
return exportSWLQSOMessage(exportFile, callsign, startDate, endDate);
}
HtmlContext.tableBegin(result, false, 0, true).append("\n");
HtmlContext.tableRowBegin(result).append("\n");
result.append("");
result.append(String.format("%s"
, callsign, startDate, endDate, GeneralVariables.getStringFromResource(R.string.html_export_adi)));
Cursor cursor;
StringBuilder dateSql = new StringBuilder();
if (!startDate.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(qso_date_off,1,8)>=\"%s\") "
, startDate.replace("-", "")));
}
if (!endDate.equals("")) {
dateSql.append(String.format(" AND (SUBSTR(qso_date_off,1,8)<=\"%s\") "
, endDate.replace("-", "")));
}
//计算总的记录数
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
"select count(*) as rc from SWLQSOTable " +
"where (([call] LIKE ?)OR(station_callsign LIKE ?))" + dateSql
, new String[]{whereStr, whereStr});
cursor.moveToFirst();
int pageCount = Math.round(((float) cursor.getInt(cursor.getColumnIndex("rc")) / pageSize) + 0.5f);
if (pageIndex > pageCount) pageIndex = pageCount;
cursor.close();
//查询、每页消息数设定
result.append(String.format("\n"
, 1, pageSize, callsign, startDate, endDate
, pageIndex - 1 == 0 ? 1 : pageIndex - 1, pageSize, callsign, startDate, endDate
, pageIndex
, pageIndex == pageCount ? pageCount : pageIndex + 1, pageSize, callsign, startDate, endDate
, pageCount, pageSize, callsign, startDate, endDate));
result.append(" | ");
HtmlContext.tableRowEnd(result);
HtmlContext.tableEnd(result).append("\n");
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
String.format(
"select * from SWLQSOTable where (([call] LIKE ?)OR(station_callsign LIKE ?)) " +
dateSql +
" order by qso_date desc,time_on desc LIMIT(%d),%d "
, (pageIndex - 1) * pageSize, pageSize), new String[]{whereStr, whereStr});
HtmlContext.tableBegin(result, false, true).append("\n");
HtmlContext.tableRowBegin(result);
HtmlContext.tableCellHeader(result, "No."
, GeneralVariables.getStringFromResource(R.string.html_callsign)//"call"
, GeneralVariables.getStringFromResource(R.string.html_qsl_grid)//"gridsquare"
, GeneralVariables.getStringFromResource(R.string.html_qsl_mode)//"mode"
, GeneralVariables.getStringFromResource(R.string.html_rst_sent)//"rst_sent"
, GeneralVariables.getStringFromResource(R.string.html_rst_rcvd)//"rst_rcvd"
, GeneralVariables.getStringFromResource(R.string.html_qsl_start_day)//"qso date"
, GeneralVariables.getStringFromResource(R.string.html_qsl_start_time)//"time_on"
, GeneralVariables.getStringFromResource(R.string.html_qsl_end_date)//qso date off
, GeneralVariables.getStringFromResource(R.string.html_qsl_end_time)//"time_off"
, GeneralVariables.getStringFromResource(R.string.html_qsl_band)//"band"
, GeneralVariables.getStringFromResource(R.string.html_qsl_freq)//"freq"
, GeneralVariables.getStringFromResource(R.string.html_callsign)//"station_callsign"
, GeneralVariables.getStringFromResource(R.string.html_qsl_grid)//"my_gridsquare"
, GeneralVariables.getStringFromResource(R.string.html_comment))//"comment")
.append("\n");
HtmlContext.tableRowEnd(result).append("\n");
int order = 0;
while (cursor.moveToNext()) {
HtmlContext.tableRowBegin(result, true, order % 2 != 0).append("\n");
String call = cursor.getString(cursor.getColumnIndex("call"));
String gridsquare = cursor.getString(cursor.getColumnIndex("gridsquare"));
String mode = cursor.getString(cursor.getColumnIndex("mode"));
String rst_sent = cursor.getString(cursor.getColumnIndex("rst_sent"));
String rst_rcvd = cursor.getString(cursor.getColumnIndex("rst_rcvd"));
String qso_date = cursor.getString(cursor.getColumnIndex("qso_date"));
String time_on = cursor.getString(cursor.getColumnIndex("time_on"));
String qso_date_off = cursor.getString(cursor.getColumnIndex("qso_date_off"));
String time_off = cursor.getString(cursor.getColumnIndex("time_off"));
String band = cursor.getString(cursor.getColumnIndex("band"));
String freq = cursor.getString(cursor.getColumnIndex("freq"));
String station_callsign = cursor.getString(cursor.getColumnIndex("station_callsign"));
String my_gridsquare = cursor.getString(cursor.getColumnIndex("my_gridsquare"));
String comment = cursor.getString(cursor.getColumnIndex("comment"));
//生成数据表的一行
HtmlContext.tableCell(result, String.format("%d", order + 1 + pageSize * (pageIndex - 1)));
HtmlContext.tableCell(result, String.format("%s"
, pageSize, call.replace("<", "")
.replace(">", "")
, call.replace("<", "<")
.replace(">", ">")));
HtmlContext.tableCell(result, gridsquare == null ? "" : gridsquare);
HtmlContext.tableCell(result, mode, rst_sent, rst_rcvd, qso_date, time_on, qso_date_off, time_off);
HtmlContext.tableCell(result, band, freq);
HtmlContext.tableCell(result, String.format("%s"
, pageSize
, station_callsign.replace("<", "")
.replace(">", "")
, station_callsign.replace("<", "<")
.replace(">", ">")));
HtmlContext.tableCell(result, my_gridsquare == null ? "" : my_gridsquare
, comment).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
order++;
}
cursor.close();
HtmlContext.tableEnd(result).append("
\n");
return newFixedLengthResponse(HtmlContext.HTML_STRING(result.toString()));
}
/**
* 把QSO日志导出到文件
*
* @param exportFile 文件名
* @param callsign 呼号
* @param start_date 起始日期
* @param end_date 结束日期
* @return 数据
*/
@SuppressLint("Range")
private Response exportQSOLogs(String exportFile, String callsign, String start_date, String end_date, String extWhere) {
Response response;
StringBuilder fileName = new StringBuilder();
fileName.append("qso_log");
if (callsign.length() > 0) {
fileName.append("_");
fileName.append(callsign.replace("/", "_")
.replace("\\", "_")
.replace(":", "_")
.replace("?", "_")
.replace("*", "_")
.replace("|", "_")
.replace("\"", "_")
.replace("'", "_")
.replace("<", "_")
.replace(".", "_")
.replace(">", "_"));
}
if (start_date.length() > 0) {
fileName.append(String.format("_%s", start_date));
}
if (end_date.length() > 0) {
fileName.append(String.format("_%s", end_date));
}
fileName.append(".").append(exportFile);
Cursor cursor;
String whereStr = String.format("%%%s%%", callsign);
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
String.format(
"select * from QSLTable where (([call] LIKE ?)OR(station_callsign LIKE ?)) " +
extWhere +
" order by qso_date desc,time_on desc "), new String[]{whereStr, whereStr});
response = newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "text/plain"
, downQSLTable(cursor, false));
response.addHeader("Content-Disposition"
, String.format("attachment;filename=%s", fileName));
return response;
}
/**
* 查询QSO日志
*
* @param session 会话
* @return html
*/
@SuppressLint({"DefaultLocale", "Range"})
private Response getQsoLogs(IHTTPSession session) {
int pageSize = 100;
String callsign = "";
StringBuilder result = new StringBuilder();
String startDate = "";
String endDate = "";
String exportFile = "";
String qIsQSL = "";
String qIsImported = "";
//读取查询的参数
Map pars = session.getParms();
int pageIndex = 1;
if (pars.get("page") != null) {
pageIndex = Integer.parseInt(Objects.requireNonNull(pars.get("page")));
}
if (pars.get("pageSize") != null) {
pageSize = Integer.parseInt(Objects.requireNonNull(pars.get("pageSize")));
}
if (pars.get("callsign") != null) {
callsign = Objects.requireNonNull(pars.get("callsign"));
}
if (pars.get("start_date") != null) {
startDate = Objects.requireNonNull(pars.get("start_date"));
}
if (pars.get("end_date") != null) {
endDate = Objects.requireNonNull(pars.get("end_date"));
}
String whereStr = String.format("%%%s%%", callsign);
if (pars.get("exportFile") != null) {
exportFile = Objects.requireNonNull(pars.get("exportFile"));
}
if (pars.get("QSL") != null) {
qIsQSL = Objects.requireNonNull(pars.get("QSL"));
}
if (pars.get("Imported") != null) {
qIsImported = Objects.requireNonNull(pars.get("Imported"));
}
result.append("\n"
cursor = mainViewModel.databaseOpr.getDb().rawQuery(
String.format(
"select * from QSLTable where (([call] LIKE ?)OR(station_callsign LIKE ?)) " +
dateSql +
" order by qso_date desc,time_on desc LIMIT(%d),%d "
, (pageIndex - 1) * pageSize, pageSize), new String[]{whereStr, whereStr});
HtmlContext.tableBegin(result, false, true).append("\n");
//表头
HtmlContext.tableRowBegin(result).append("\n");
HtmlContext.tableCellHeader(result, "No.", "QSL"
, GeneralVariables.getStringFromResource(R.string.html_qso_source)
, GeneralVariables.getStringFromResource(R.string.html_callsign)
, GeneralVariables.getStringFromResource(R.string.html_qsl_grid)
, GeneralVariables.getStringFromResource(R.string.html_qsl_mode)
, GeneralVariables.getStringFromResource(R.string.html_rst_sent)
, GeneralVariables.getStringFromResource(R.string.html_rst_rcvd)
, GeneralVariables.getStringFromResource(R.string.html_qsl_start_day)//"qso date"
, GeneralVariables.getStringFromResource(R.string.html_qsl_start_time)//"time_on"
, GeneralVariables.getStringFromResource(R.string.html_qsl_end_date)//qso date off
, GeneralVariables.getStringFromResource(R.string.html_qsl_end_time)//"time_off"
, GeneralVariables.getStringFromResource(R.string.html_qsl_band)
, GeneralVariables.getStringFromResource(R.string.html_qsl_freq)
, GeneralVariables.getStringFromResource(R.string.html_callsign)//"station_callsign"
, GeneralVariables.getStringFromResource(R.string.html_qsl_grid)//"my_gridsquare"
, GeneralVariables.getStringFromResource(R.string.html_comment))//"comment")
.append("\n");
HtmlContext.tableRowEnd(result).append("\n");
//表内容
int order = 0;
while (cursor.moveToNext()) {
HtmlContext.tableRowBegin(result, true, order % 2 != 0).append("\n");
String call = cursor.getString(cursor.getColumnIndex("call"));
boolean isQSL = cursor.getInt(cursor.getColumnIndex("isQSL")) == 1;
boolean isLotW_Import = cursor.getInt(cursor.getColumnIndex("isLotW_import")) == 1;
boolean isLotW_QSL = cursor.getInt(cursor.getColumnIndex("isLotW_QSL")) == 1;
String gridsquare = cursor.getString(cursor.getColumnIndex("gridsquare"));
String mode = cursor.getString(cursor.getColumnIndex("mode"));
String rst_sent = cursor.getString(cursor.getColumnIndex("rst_sent"));
String rst_rcvd = cursor.getString(cursor.getColumnIndex("rst_rcvd"));
String qso_date = cursor.getString(cursor.getColumnIndex("qso_date"));
String time_on = cursor.getString(cursor.getColumnIndex("time_on"));
String qso_date_off = cursor.getString(cursor.getColumnIndex("qso_date_off"));
String time_off = cursor.getString(cursor.getColumnIndex("time_off"));
String band = cursor.getString(cursor.getColumnIndex("band"));
String freq = cursor.getString(cursor.getColumnIndex("freq"));
String station_callsign = cursor.getString(cursor.getColumnIndex("station_callsign"));
String my_gridsquare = cursor.getString(cursor.getColumnIndex("my_gridsquare"));
String comment = cursor.getString(cursor.getColumnIndex("comment"));
HtmlContext.tableCell(result, String.format("%d", order + 1 + pageSize * (pageIndex - 1)));
HtmlContext.tableCell(result, (isQSL || isLotW_QSL) ? "√" : "✗");
HtmlContext.tableCell(result, isLotW_Import ?
String.format("%s"
, GeneralVariables.getStringFromResource(R.string.html_qso_external))
: String.format("%s"
, GeneralVariables.getStringFromResource(R.string.html_qso_raw)));//是否是导入的
HtmlContext.tableCell(result, String.format("%s"
, pageSize
, call.replace("<", "")
.replace(">", "")
, call.replace("<", "<")
.replace(">", ">")));
HtmlContext.tableCell(result, gridsquare == null ? "" : gridsquare, mode, rst_sent, rst_rcvd
, qso_date, time_on, qso_date_off, time_off, band, freq);
HtmlContext.tableCell(result, String.format("%s"
, pageSize
, station_callsign.replace("<", "")
.replace(">", "")
, station_callsign.replace("<", "<")
.replace(">", ">")));
HtmlContext.tableCell(result, my_gridsquare == null ? "" : my_gridsquare
, comment).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
order++;
}
cursor.close();
HtmlContext.tableEnd(result).append("
\n");
return newFixedLengthResponse(HtmlContext.HTML_STRING(result.toString()));
}
/**
* 获取全部通联日志
*
* @return HTML
*/
private String showAllQSL() {
Cursor cursor = mainViewModel.databaseOpr.getDb().rawQuery(
"select * from QSLTable order by ID DESC ", null);
return HtmlContext.ListTableContext(cursor, true);
}
/**
* 按月获取日志
*
* @param month 月份yyyymm
* @return HTML
*/
private String showQSLByMonth(String month) {
Cursor cursor = mainViewModel.databaseOpr.getDb().rawQuery(
"select * from QSLTable WHERE SUBSTR(qso_date,1,?)=? \n" +
"order by ID DESC ", new String[]{String.valueOf(month.length()), month});
return HtmlContext.ListTableContext(cursor, true);
}
/**
* 查最新解码的消息
*
* @return html
*/
private String getNewMessages() {
StringBuilder result = new StringBuilder();
result.append("");
HtmlContext.tableBegin(result, false, true).append("\n");
HtmlContext.tableRowBegin(result);
HtmlContext.tableCellHeader(result, "UTC", "dB", "Δt"
, GeneralVariables.getStringFromResource(R.string.html_qsl_freq)
, GeneralVariables.getStringFromResource(R.string.message)
, GeneralVariables.getStringFromResource(R.string.html_carrier_frequency_band));
HtmlContext.tableRowEnd(result).append("\n");
int order = 0;
if (mainViewModel.currentMessages != null) {
for (Ft8Message message : mainViewModel.currentMessages) {
HtmlContext.tableRowBegin(result, true, order % 2 != 0)
.append("\n").append(message.toHtml());
HtmlContext.tableRowEnd(result).append("\n");
order++;
}
}
HtmlContext.tableEnd(result).append("
\n");
return result.toString();
}
/**
* 显示导入FT8CN日志文件的HTML
*
* @return HTML
*/
private String showImportLog() {
StringBuilder result = new StringBuilder();
HtmlContext.tableBegin(result, false, 0, true).append("\n");
HtmlContext.tableRowBegin(result, false, true);
HtmlContext.tableCell(result, String.format("%s%s%s"
, GeneralVariables.getStringFromResource(R.string.html_please_select)
, GeneralVariables.getStringFromResource(R.string.html_adi_format)
, GeneralVariables.getStringFromResource(R.string.html_file_in_other_format)));
HtmlContext.tableRowEnd(result).append("\n");
HtmlContext.tableRowBegin(result).append("\n");
result.append("
| ");
HtmlContext.tableRowEnd(result).append("\n");
HtmlContext.tableEnd(result).append("\n");
return result.toString();
}
@SuppressLint("Range")
private String showQSLTable() {
StringBuilder result = new StringBuilder();
HtmlContext.tableBegin(result, false, 1, true).append("\n");
HtmlContext.tableRowBegin(result).append("\n");
HtmlContext.tableCellHeader(result
, GeneralVariables.getStringFromResource(R.string.html_time)
, GeneralVariables.getStringFromResource(R.string.html_total)
, GeneralVariables.getStringFromResource(R.string.html_operation)
, GeneralVariables.getStringFromResource(R.string.html_operation)
, GeneralVariables.getStringFromResource(R.string.html_operation)
).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
Cursor cursor = mainViewModel.databaseOpr.getDb().rawQuery("select count(*) as b from QSLTable"
, null);
cursor.moveToFirst();
result.append(String.format("%s | "
, GeneralVariables.getStringFromResource(R.string.html_all_logs)));
result.append(String.format("%s | ", cursor.getString(cursor.getColumnIndex("b"))));
result.append(String.format("%s | "
, GeneralVariables.getStringFromResource(R.string.html_download)));
result.append(" | |
");
cursor.close();
cursor = mainViewModel.databaseOpr.getDb().rawQuery("select count(*) as b from QSLTable\n" +
"WHERE SUBSTR(qso_date,1,8)=?", new String[]{UtcTimer.getYYYYMMDD(UtcTimer.getSystemTime())});
cursor.moveToFirst();
HtmlContext.tableRowBegin(result, true, true).append("\n");
HtmlContext.tableCell(result, String.format("%s"
, UtcTimer.getYYYYMMDD(UtcTimer.getSystemTime())
, GeneralVariables.getStringFromResource(R.string.html_today_log)));
HtmlContext.tableCell(result, cursor.getString(cursor.getColumnIndex("b")));
HtmlContext.tableCell(result, String.format("%s"
, UtcTimer.getYYYYMMDD(UtcTimer.getSystemTime())
, GeneralVariables.getStringFromResource(R.string.html_download_all)));
HtmlContext.tableCell(result, String.format("%s"
, UtcTimer.getYYYYMMDD(UtcTimer.getSystemTime())
, GeneralVariables.getStringFromResource(R.string.html_download_unconfirmed)));
HtmlContext.tableCell(result, String.format("%s"
, UtcTimer.getYYYYMMDD(UtcTimer.getSystemTime())
, GeneralVariables.getStringFromResource(R.string.html_delete))).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
cursor.close();
int order = 1;
cursor = mainViewModel.databaseOpr.getDb()
.rawQuery("select SUBSTR(qso_date,1,6) as a,count(*) as b from QSLTable\n" +
"group by SUBSTR(qso_date,1,6)", null);
while (cursor.moveToNext()) {
HtmlContext.tableRowBegin(result, true, order % 2 == 0);
HtmlContext.tableCell(result, String.format("%s"
, cursor.getString(cursor.getColumnIndex("a"))
, cursor.getString(cursor.getColumnIndex("a"))));
HtmlContext.tableCell(result, cursor.getString(cursor.getColumnIndex("b")));
HtmlContext.tableCell(result, String.format("%s"
, cursor.getString(cursor.getColumnIndex("a"))
, GeneralVariables.getStringFromResource(R.string.html_download_all)));
HtmlContext.tableCell(result, String.format("%s"
, cursor.getString(cursor.getColumnIndex("a"))
, GeneralVariables.getStringFromResource(R.string.html_download_unconfirmed)));
HtmlContext.tableCell(result, String.format("%s"
, cursor.getString(cursor.getColumnIndex("a"))
, GeneralVariables.getStringFromResource(R.string.html_delete))).append("\n");
HtmlContext.tableRowEnd(result).append("\n");
order++;
}
HtmlContext.tableEnd(result).append("\n");
cursor.close();
return result.toString();
}
private String downQSLByMonth(String month, boolean downall) {
Cursor cursor;
if (downall) {
cursor = mainViewModel.databaseOpr.getDb().rawQuery("select * from QSLTable \n" +
"WHERE (SUBSTR(qso_date,1,?)=?)"
, new String[]{String.valueOf(month.length()), month});
} else {
cursor = mainViewModel.databaseOpr.getDb().rawQuery("select * from QSLTable \n" +
"WHERE (SUBSTR(qso_date,1,?)=?)and(isLotW_QSL=0 and isQSL=0)"
, new String[]{String.valueOf(month.length()), month});
}
return downQSLTable(cursor, false);
}
/**
* 下载全部日志
*
* @return String
*/
private String downAllQSl() {
Cursor cursor = mainViewModel.databaseOpr.getDb().rawQuery("select * from QSLTable", null);
return downQSLTable(cursor, false);
}
/**
* 生成QSL记录文本
*
* @return 日志内容
*/
@SuppressLint({"Range", "DefaultLocale"})
private String downQSLTable(Cursor cursor, boolean isSWL) {
StringBuilder logStr = new StringBuilder();
logStr.append("FT8CN ADIF Export\n");
while (cursor.moveToNext()) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("call")).length()
, cursor.getString(cursor.getColumnIndex("call"))));
if (!isSWL) {
if (cursor.getInt(cursor.getColumnIndex("isLotW_QSL")) == 1) {
logStr.append("Y ");
} else {
logStr.append("N ");
}
if (cursor.getInt(cursor.getColumnIndex("isQSL")) == 1) {
logStr.append("Y ");
} else {
logStr.append("N ");
}
} else {
logStr.append("Y ");
}
if (cursor.getString(cursor.getColumnIndex("gridsquare")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("gridsquare")).length()
, cursor.getString(cursor.getColumnIndex("gridsquare"))));
}
if (cursor.getString(cursor.getColumnIndex("mode")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("mode")).length()
, cursor.getString(cursor.getColumnIndex("mode"))));
}
if (cursor.getString(cursor.getColumnIndex("rst_sent")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("rst_sent")).length()
, cursor.getString(cursor.getColumnIndex("rst_sent"))));
}
if (cursor.getString(cursor.getColumnIndex("rst_rcvd")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("rst_rcvd")).length()
, cursor.getString(cursor.getColumnIndex("rst_rcvd"))));
}
if (cursor.getString(cursor.getColumnIndex("qso_date")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("qso_date")).length()
, cursor.getString(cursor.getColumnIndex("qso_date"))));
}
if (cursor.getString(cursor.getColumnIndex("time_on")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("time_on")).length()
, cursor.getString(cursor.getColumnIndex("time_on"))));
}
if (cursor.getString(cursor.getColumnIndex("qso_date_off")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("qso_date_off")).length()
, cursor.getString(cursor.getColumnIndex("qso_date_off"))));
}
if (cursor.getString(cursor.getColumnIndex("time_off")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("time_off")).length()
, cursor.getString(cursor.getColumnIndex("time_off"))));
}
if (cursor.getString(cursor.getColumnIndex("band")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("band")).length()
, cursor.getString(cursor.getColumnIndex("band"))));
}
if (cursor.getString(cursor.getColumnIndex("freq")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("freq")).length()
, cursor.getString(cursor.getColumnIndex("freq"))));
}
if (cursor.getString(cursor.getColumnIndex("station_callsign")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("station_callsign")).length()
, cursor.getString(cursor.getColumnIndex("station_callsign"))));
}
if (cursor.getString(cursor.getColumnIndex("my_gridsquare")) != null) {
logStr.append(String.format("%s "
, cursor.getString(cursor.getColumnIndex("my_gridsquare")).length()
, cursor.getString(cursor.getColumnIndex("my_gridsquare"))));
}
String comment = cursor.getString(cursor.getColumnIndex("comment"));
//Distance: 99 km
//在写库的时候,一定要加" km"
logStr.append(String.format("%s \n"
, comment.length()
, comment));
}
cursor.close();
return logStr.toString();
}
}