void es_GetUrlExitFunc (URL_Struct *urls, int status, MWContext *cx) { RDF_Resource parent = NULL, child = NULL, r; _esFEData *feData; char *newURL, *p; feData = (_esFEData *)urls->fe_data; if ((status >= 0) && (feData != NULL)) { parent = RDF_GetResource(gNCDB, feData->parent, false); child = RDF_GetResource(gNCDB, feData->child, false); if ((parent != NULL) && (child != NULL)) { switch(feData->method) { case URL_POST_METHOD: if (((p = strrchr(resourceID(child), '/')) != NULL) && (*++p != '\0')) { if ((newURL = append2Strings(resourceID(parent), p)) != NULL) { if ((r = RDF_GetResource(gNCDB, newURL, 1)) != NULL) { setContainerp(r, containerp(child)); setResourceType(r, resourceType(child)); remoteStoreAdd(gRemoteStore, r, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE, 1); } freeMem(newURL); } } break; case URL_DELETE_METHOD: remoteStoreRemove(gRemoteStore, child, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE); break; } } } else if (status < 0) { if ((cx != NULL) && (urls != NULL) && (urls->error_msg != NULL)) { FE_Alert(cx, urls->error_msg); } } if (feData != NULL) { esFreeFEData(feData); } NET_FreeURLStruct (urls); }
void parseNextESFTPLine (RDFFile f, char* line) { int16 i1, i2; char url[100]; RDF_Resource ru; PRBool directoryp; if (f->fileType == FTP_RT) { if (!startsWith("201", line)) return; line = &line[5]; } i1 = charSearch(' ', line); if (i1 == -1) return; i2 = charSearch(' ', &line[i1+1]) + i1 + 1; line[i1] = '\0'; directoryp = 0; if (strlen(line) > 64) return; if (resourceType(f->top) == ES_RT) { directoryp = startsWith("Director", &line[i1+1]); sprintf(url, "nes:%s%s%s", f->url, line, (directoryp ? "/" : "")); } else { int i3 = charSearch(' ', &line[i1+i2+1]); directoryp = startsWith("Directory", &line[i1+i2+i3+2]); /* this is bad as files can be of zero-length! if ((charSearch('.', line) ==-1) && (startsWith("0", &line[i1+1]))) directoryp = 1; */ sprintf(url, "%s%s%s", f->url, line, (directoryp ? "/" : "")); } ru = RDF_GetResource(NULL, url, 1); setResourceType(ru, resourceType(f->top)); if (directoryp) setContainerp(ru, 1); /* remoteStoreAdd(gRemoteStore, ru, gCoreVocab->RDF_name, NET_UnEscape(line), RDF_STRING_TYPE, 1); */ remoteStoreAdd(gRemoteStore, ru, gCoreVocab->RDF_parent, f->top, RDF_RESOURCE_TYPE, 1); }
void collateHistory (RDF r, RDF_Resource u, PRBool byDateFlag) { HASHINFO hash = { 4*1024, 0, 0, 0, 0, 0}; DBT key, data; time_t last,first,numaccess; PRBool firstOne = 0; DB* db = CallDBOpenUsingFileURL(gGlobalHistoryURL, O_RDONLY ,0600, DB_HASH, &hash); grdf = r; if (db != NULL) { if (!byDateFlag) { hostHash = PL_NewHashTable(500, idenHash, PL_CompareValues, PL_CompareValues, null, null); } else ByDateOpened = 1; while (0 == (*db->seq)(db, &key, &data, (firstOne ? R_NEXT : R_FIRST))) { char* title = ((char*)data.data + 16); /* title */ char* url = (char*)key.data; /* url */ int32 flag = (int32)*((char*)data.data + 3*sizeof(int32)); firstOne = 1; #ifdef XP_UNIX if ((/*1 == flag &&*/ displayHistoryItem((char*)key.data))) { #else if (1 == flag && displayHistoryItem((char*)key.data)) { #endif COPY_INT32(&last, (time_t *)((char *)data.data)); COPY_INT32(&first, (time_t *)((char *)data.data + 4)); COPY_INT32(&numaccess, (time_t *)((char *)data.data + 8)); collateOneHist(r, u,url,title, last, first, numaccess, byDateFlag); } } (*db->close)(db); } } void collateOneHist (RDF r, RDF_Resource u, char* url, char* title, time_t lastAccessDate, time_t firstAccessDate, uint32 numAccesses, PRBool byDateFlag) { RDF_Resource hostUnit, urlUnit; char* existingName = NULL; if (startsWith("404", title)) return; urlUnit = HistCreate(url, 1); existingName = nlocalStoreGetSlotValue(gLocalStore, urlUnit, gCoreVocab->RDF_name, RDF_STRING_TYPE, 0, 1); if (existingName == NULL) { if (title[0] != '\0') remoteAddName(urlUnit, title); } else freeMem(existingName); if (byDateFlag) { hostUnit = hostUnitOfDate(r, u, lastAccessDate); } else { hostUnit = hostUnitOfURL(r, u, urlUnit, title); } if (hostUnit == NULL) return; if (hostUnit != urlUnit) remoteAddParent(urlUnit, hostUnit); remoteStoreAdd(gRemoteStore, urlUnit, gWebData->RDF_lastVisitDate, (void *)lastAccessDate, RDF_INT_TYPE, 1); remoteStoreAdd(gRemoteStore, urlUnit, gWebData->RDF_firstVisitDate, (void *)firstAccessDate, RDF_INT_TYPE, 1); if (numAccesses==0) ++numAccesses; remoteStoreAdd(gRemoteStore, urlUnit, gWebData->RDF_numAccesses, (void *)numAccesses, RDF_INT_TYPE, 1); }
RDF_Resource hostUnitOfDate (RDF r, RDF_Resource u, time_t lastAccessDate) { RDF_Resource node = NULL, parentNode; /* RDF_Resources std; */ time_t now, tempTime; struct tm *T,nowStruct, dateStruct; char hourBuffer[128], dayBuffer[128], weekBuffer[128]; char bigBuffer[1024]; int numDays; /* NOTE: localtime uses a single static buffer, so MUST copy contents out */ time((time_t *)&now); if ((T = localtime(&now)) == NULL) return(NULL); nowStruct = *T; if ((T = localtime(&lastAccessDate)) == NULL) return(NULL); dateStruct = *T; bigBuffer[0] = hourBuffer[0] = dayBuffer[0] = weekBuffer[0] = 0; if (now < (lastAccessDate + SECS_IN_HOUR)) /* within the last hour */ { strcpy(hourBuffer, XP_GetString(RDF_WITHINLASTHOUR)); } else if ((nowStruct.tm_year == dateStruct.tm_year) && /* some time today */ (nowStruct.tm_yday == dateStruct.tm_yday)) { strcpy(dayBuffer, XP_GetString(RDF_TODAY)); hourRange(hourBuffer, &dateStruct); } else /* check if within last week */ { numDays = 7; do { now -= SECS_IN_DAY; if ((T = localtime(&now)) == NULL) return(NULL); nowStruct = *T; if ((nowStruct.tm_year == dateStruct.tm_year) && (nowStruct.tm_yday == dateStruct.tm_yday)) { sprintf(dayBuffer, "%d/%d - %s", (uint) dateStruct.tm_mon + 1, (uint)dateStruct.tm_mday, XP_GetString(RDF_DAY_0 + nowStruct.tm_wday)); hourRange(hourBuffer, &dateStruct); break; } } while (numDays-- > 0); if (dayBuffer[0] == '\0') /* older than a week */ { tempTime = lastAccessDate; numDays = dateStruct.tm_wday; while (numDays-- > 0) { tempTime -= SECS_IN_DAY; } if ((T = localtime(&tempTime)) == NULL) return(NULL); dateStruct = *T; #ifdef XP_MAC /* Mac epoch according to localtime is 1904 */ PR_snprintf(weekBuffer, sizeof(weekBuffer)-1, XP_GetString(RDF_WEEKOF), (uint)dateStruct.tm_mon + 1, (int)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1904); #else PR_snprintf(weekBuffer, sizeof(weekBuffer)-1, XP_GetString(RDF_WEEKOF), (uint)dateStruct.tm_mon + 1, (int)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1900); #endif if ((T = localtime(&lastAccessDate)) == NULL) return(NULL); dateStruct = *T; #ifdef XP_MAC /* Mac epoch according to localtime is 1904 */ sprintf(dayBuffer, "%s - %d/%d/%d", XP_GetString(RDF_DAY_0 + dateStruct.tm_wday), (uint) dateStruct.tm_mon + 1, (uint)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1904); #else sprintf(dayBuffer, "%s - %d/%d/%d", XP_GetString(RDF_DAY_0 + dateStruct.tm_wday), (uint) dateStruct.tm_mon + 1, (uint)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1900); #endif hourRange(hourBuffer, &dateStruct); } } parentNode = u; if (weekBuffer[0] != '\0') { if ((node = RDF_GetResource(NULL, weekBuffer, false)) == NULL) { if ((node = RDF_GetResource(NULL, weekBuffer, true)) == NULL) return(NULL); } setContainerp(node, 1); setResourceType(node, HISTORY_RT); remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_parent, parentNode, RDF_RESOURCE_TYPE, 1); remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name, copyString(weekBuffer), RDF_STRING_TYPE, 1); parentNode = node; } if (dayBuffer[0] != '\0') { sprintf(bigBuffer, "%d/%d", (uint) dateStruct.tm_mon + 1, (uint)dateStruct.tm_mday); if ((node = RDF_GetResource(NULL, bigBuffer, false)) == NULL) { if ((node = RDF_GetResource(NULL, bigBuffer, true)) == NULL) return(NULL); } setContainerp(node, 1); setResourceType(node, HISTORY_RT); histAddParent(node, parentNode); sprintf(bigBuffer,"%s - %s",weekBuffer,dayBuffer); remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name, copyString(dayBuffer), RDF_STRING_TYPE, 1); parentNode = node; } if (hourBuffer[0] == 'W') { sprintf(bigBuffer, "%s", hourBuffer); if ((node = RDF_GetResource(NULL, bigBuffer, false)) == NULL) { if ((node = RDF_GetResource(NULL, bigBuffer, true)) == NULL) return(NULL); } setContainerp(node, 1); setResourceType(node, HISTORY_RT); remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_parent, parentNode, RDF_RESOURCE_TYPE, 1); remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name, copyString(hourBuffer), RDF_STRING_TYPE, 1); parentNode = node; } return (node); }