Partial reversion of Multi-user-logbook commit
  Preparation for introduction of client/server logbook
pull/2/head
David Freese 2010-11-19 08:50:05 -06:00
rodzic afeccbb9af
commit f2b39b1ede
5 zmienionych plików z 27 dodań i 135 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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();