kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Reversion of commit 2a957966c1
Partial reversion of Multi-user-logbook commit Preparation for introduction of client/server logbookpull/2/head
rodzic
afeccbb9af
commit
f2b39b1ede
|
@ -19,8 +19,8 @@ private:
|
|||
cQsoRec adifqso;
|
||||
FILE *adiFile;
|
||||
void fillfield(int, char *);
|
||||
std::string log_checksum;
|
||||
std::string file_checksum;
|
||||
// std::string log_checksum;
|
||||
// std::string file_checksum;
|
||||
public:
|
||||
cAdifIO ();
|
||||
~cAdifIO () {};
|
||||
|
@ -30,10 +30,10 @@ public:
|
|||
int writeFile (const char *, cQsoDb *);
|
||||
int writeLog (const char *, cQsoDb *);
|
||||
bool log_changed(const char *fname);
|
||||
std::string get_checksum() { return log_checksum; }
|
||||
void set_checksum( std::string s ) { log_checksum = s; }
|
||||
std::string get_file_checksum() { return file_checksum; }
|
||||
void do_checksum(cQsoDb &);
|
||||
// std::string get_checksum() { return log_checksum; }
|
||||
// void set_checksum( std::string s ) { log_checksum = s; }
|
||||
// std::string get_file_checksum() { return file_checksum; }
|
||||
// void do_checksum(cQsoDb &);
|
||||
};
|
||||
|
||||
// crc 16 cycle redundancy check sum
|
||||
|
|
|
@ -37,9 +37,19 @@ int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout);
|
|||
int sem_timedwait_rel(sem_t* sem, double rel_timeout);
|
||||
int pthread_cond_timedwait_rel(pthread_cond_t* cond, pthread_mutex_t* mutex, double rel_timeout);
|
||||
|
||||
//enum {
|
||||
// INVALID_TID = -1,
|
||||
// TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID, LOGBOOK_TID,
|
||||
//#if USE_XMLRPC
|
||||
// XMLRPC_TID,
|
||||
//#endif
|
||||
// ARQ_TID, ARQSOCKET_TID,
|
||||
// FLMAIN_TID,
|
||||
// NUM_THREADS, NUM_QRUNNER_THREADS = NUM_THREADS - 1
|
||||
//};
|
||||
enum {
|
||||
INVALID_TID = -1,
|
||||
TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID, LOGBOOK_TID,
|
||||
TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID,
|
||||
#if USE_XMLRPC
|
||||
XMLRPC_TID,
|
||||
#endif
|
||||
|
|
|
@ -94,18 +94,6 @@ void initfields()
|
|||
fields[i].name = new string(fieldnames[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
int fieldnbr (const char *s) {
|
||||
for (int i = 0; i < NUMFIELDS; i++)
|
||||
if (fields[i].name == s) {
|
||||
// if (strncasecmp( fields[i].name, s, fields[i].size) == 0) {
|
||||
if (fields[i].type == COMMENT) return(NOTES);
|
||||
return fields[i].type;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
|
||||
int findfield( char *p )
|
||||
{
|
||||
int m;
|
||||
|
@ -186,7 +174,6 @@ void cAdifIO::readFile (const char *fname, cQsoDb *db) {
|
|||
// relaxed file integrity test to all importing from non conforming log programs
|
||||
if ((strcasestr(buff, "<ADIF_VER:") != 0) &&
|
||||
(strcasestr(buff, "<CALL:") == 0)) {
|
||||
// fl_alert2(_("No records in ADIF logbook file"));
|
||||
delete [] buff;
|
||||
return;
|
||||
}
|
||||
|
@ -195,15 +182,6 @@ void cAdifIO::readFile (const char *fname, cQsoDb *db) {
|
|||
delete [] buff;
|
||||
return;
|
||||
}
|
||||
char *p = strcasestr(buff, "<DATA CHECKSUM:");
|
||||
if (p) {
|
||||
p = strchr(p + 1, '>');
|
||||
if (p) {
|
||||
p++;
|
||||
file_checksum.clear();
|
||||
for (int i = 0; i < 4; i++, p++) file_checksum += *p;
|
||||
}
|
||||
}
|
||||
|
||||
char *p1 = buff, *p2;
|
||||
if (*p1 != '<') { // yes, skip over header to start of records
|
||||
|
@ -238,7 +216,6 @@ void cAdifIO::readFile (const char *fname, cQsoDb *db) {
|
|||
p2 = strchr(p1,'<');
|
||||
}
|
||||
|
||||
log_checksum = file_checksum;
|
||||
db->SortByDate();
|
||||
delete [] buff;
|
||||
}
|
||||
|
@ -360,61 +337,7 @@ int cAdifIO::writeLog (const char *fname, cQsoDb *db) {
|
|||
fprintf (adiFile, "%s", records.c_str());
|
||||
|
||||
fclose (adiFile);
|
||||
log_checksum = s_checksum;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cAdifIO::do_checksum(cQsoDb &db)
|
||||
{
|
||||
Ccrc16 checksum;
|
||||
string sFld;
|
||||
cQsoRec *rec;
|
||||
string records;
|
||||
string record;
|
||||
char recfield[200];
|
||||
|
||||
records.clear();
|
||||
for (int i = 0; i < db.nbrRecs(); i++) {
|
||||
rec = db.getRec(i);
|
||||
record.clear();
|
||||
for (int j = 0; j < NUMFIELDS; j++) {
|
||||
sFld = rec->getField(j);
|
||||
if (!sFld.empty()) {
|
||||
snprintf(recfield, sizeof(recfield), adifmt,
|
||||
fields[j].name->c_str(), sFld.length());
|
||||
record.append(recfield).append(sFld);
|
||||
}
|
||||
}
|
||||
record.append(szEOR);
|
||||
record.append(szEOL);
|
||||
records.append(record);
|
||||
}
|
||||
log_checksum = checksum.scrc16(records);
|
||||
}
|
||||
|
||||
bool cAdifIO::log_changed (const char *fname)
|
||||
{
|
||||
int retval;
|
||||
// open the adif file
|
||||
FILE *adiFile = fopen (fname, "r");
|
||||
if (!adiFile)
|
||||
return false;
|
||||
|
||||
// read first 2048 chars
|
||||
char buff[2048];
|
||||
retval = fread (buff, 2048, 1, adiFile);
|
||||
fclose (adiFile);
|
||||
|
||||
if (retval) {
|
||||
string sbuff = buff;
|
||||
size_t p = sbuff.find("<DATA CHECKSUM:");
|
||||
if (p == string::npos) return false;
|
||||
p = sbuff.find(">", p);
|
||||
if (p == string::npos) return false;
|
||||
p++;
|
||||
if (log_checksum != sbuff.substr(p, 4))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -13,40 +13,6 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
std::string log_checksum;
|
||||
|
||||
pthread_t logbook_thread;
|
||||
pthread_mutex_t logbook_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
bool logbook_exit = false;
|
||||
|
||||
static void *logbook_loop(void *args)
|
||||
{
|
||||
SET_THREAD_ID(LOGBOOK_TID);
|
||||
int cnt = 5;
|
||||
for (;;) {
|
||||
/* see if we are being canceled */
|
||||
if (logbook_exit)
|
||||
break;
|
||||
if (cnt-- == 0) {
|
||||
cnt = 5;
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
|
||||
if (adifFile.log_changed(logbook_filename.c_str())) {
|
||||
qsodb.deleteRecs();
|
||||
adifFile.readFile (logbook_filename.c_str(), &qsodb);
|
||||
REQ(loadBrowser,0);
|
||||
qsodb.isdirty(0);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
}
|
||||
MilliSleep(100);
|
||||
|
||||
}
|
||||
// exit the arq thread
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void start_logbook ()
|
||||
{
|
||||
create_logbook_dialogs();
|
||||
|
@ -71,17 +37,10 @@ void start_logbook ()
|
|||
qsodb.isdirty(0);
|
||||
activateButtons();
|
||||
|
||||
if (pthread_create(&logbook_thread, NULL, logbook_loop, NULL) < 0)
|
||||
LOG_ERROR("%s", "pthread_create failed");
|
||||
}
|
||||
|
||||
void close_logbook()
|
||||
{
|
||||
saveLogbook();
|
||||
// tell the logbook thread to kill it self
|
||||
logbook_exit = true;
|
||||
// and then wait for it to die
|
||||
pthread_join(logbook_thread, NULL);
|
||||
logbook_exit = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -149,9 +149,9 @@ void saveLogbook()
|
|||
cQsoDb::reverse = false;
|
||||
qsodb.SortByDate();
|
||||
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
// pthread_mutex_lock (&logbook_mutex);
|
||||
adifFile.writeLog (logbook_filename.c_str(), &qsodb);
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
// pthread_mutex_unlock (&logbook_mutex);
|
||||
|
||||
qsodb.isdirty(0);
|
||||
restore_sort();
|
||||
|
@ -208,9 +208,9 @@ void cb_mnuSaveLogbook(Fl_Menu_*m, void* d) {
|
|||
cQsoDb::reverse = false;
|
||||
qsodb.SortByDate();
|
||||
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
// pthread_mutex_lock (&logbook_mutex);
|
||||
adifFile.writeLog (logbook_filename.c_str(), &qsodb);
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
// pthread_mutex_unlock (&logbook_mutex);
|
||||
|
||||
qsodb.isdirty(0);
|
||||
restore_sort();
|
||||
|
@ -606,9 +606,9 @@ void saveRecord() {
|
|||
cQsoDb::reverse = false;
|
||||
qsodb.SortByDate();
|
||||
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
// pthread_mutex_lock (&logbook_mutex);
|
||||
adifFile.writeLog (logbook_filename.c_str(), &qsodb);
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
// pthread_mutex_unlock (&logbook_mutex);
|
||||
|
||||
qsodb.isdirty(0);
|
||||
}
|
||||
|
@ -651,9 +651,9 @@ cQsoRec rec;
|
|||
cQsoDb::reverse = false;
|
||||
qsodb.SortByDate();
|
||||
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
// pthread_mutex_lock (&logbook_mutex);
|
||||
adifFile.writeLog (logbook_filename.c_str(), &qsodb);
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
// pthread_mutex_unlock (&logbook_mutex);
|
||||
|
||||
qsodb.isdirty(0);
|
||||
restore_sort();
|
||||
|
@ -672,9 +672,9 @@ void deleteRecord () {
|
|||
cQsoDb::reverse = false;
|
||||
qsodb.SortByDate();
|
||||
|
||||
pthread_mutex_lock (&logbook_mutex);
|
||||
// pthread_mutex_lock (&logbook_mutex);
|
||||
adifFile.writeLog (logbook_filename.c_str(), &qsodb);
|
||||
pthread_mutex_unlock (&logbook_mutex);
|
||||
// pthread_mutex_unlock (&logbook_mutex);
|
||||
|
||||
qsodb.isdirty(0);
|
||||
restore_sort();
|
||||
|
|
Ładowanie…
Reference in New Issue