From 0159a35dfc6ec0c2698770880d834d86b0cf73fa Mon Sep 17 00:00:00 2001 From: "waterson%netscape.com" Date: Thu, 11 Mar 1999 22:26:08 +0000 Subject: [PATCH] Bug 3213. Removed obsolete files to keep the tree clean. git-svn-id: svn://10.0.0.236/trunk@23771 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/rdf/src/README | 7 - mozilla/rdf/src/bmk2rdf.c | 606 -- mozilla/rdf/src/bmk2rdf.h | 76 - mozilla/rdf/src/columns.c | 284 - mozilla/rdf/src/columns.h | 48 - mozilla/rdf/src/core.c | 1123 --- mozilla/rdf/src/core.h | 93 - mozilla/rdf/src/glue.h | 90 - mozilla/rdf/src/ht.c | 10392 ------------------------ mozilla/rdf/src/ht.h | 399 - mozilla/rdf/src/mail.c | 563 -- mozilla/rdf/src/nsRDFElement.cpp | 1449 ---- mozilla/rdf/src/nsRDFFactory.cpp | 183 - mozilla/rdf/src/nsRDFHTMLDocument.cpp | 206 - mozilla/rdf/src/rdf-int.h | 465 -- mozilla/rdf/src/rdfht.c | 199 - mozilla/rdf/src/rdfparse.c | 573 -- mozilla/rdf/src/rdfparse.h | 61 - mozilla/rdf/src/rdfstr.h | 32 - mozilla/rdf/src/remstore.c | 833 -- mozilla/rdf/src/remstore.h | 85 - mozilla/rdf/src/utils.c | 806 -- mozilla/rdf/src/utils.h | 89 - mozilla/rdf/src/vocab.c | 337 - mozilla/rdf/src/vocabint.h | 56 - 25 files changed, 19055 deletions(-) delete mode 100644 mozilla/rdf/src/README delete mode 100644 mozilla/rdf/src/bmk2rdf.c delete mode 100644 mozilla/rdf/src/bmk2rdf.h delete mode 100644 mozilla/rdf/src/columns.c delete mode 100644 mozilla/rdf/src/columns.h delete mode 100644 mozilla/rdf/src/core.c delete mode 100644 mozilla/rdf/src/core.h delete mode 100644 mozilla/rdf/src/glue.h delete mode 100644 mozilla/rdf/src/ht.c delete mode 100644 mozilla/rdf/src/ht.h delete mode 100644 mozilla/rdf/src/mail.c delete mode 100644 mozilla/rdf/src/nsRDFElement.cpp delete mode 100644 mozilla/rdf/src/nsRDFFactory.cpp delete mode 100644 mozilla/rdf/src/nsRDFHTMLDocument.cpp delete mode 100644 mozilla/rdf/src/rdf-int.h delete mode 100644 mozilla/rdf/src/rdfht.c delete mode 100644 mozilla/rdf/src/rdfparse.c delete mode 100644 mozilla/rdf/src/rdfparse.h delete mode 100644 mozilla/rdf/src/rdfstr.h delete mode 100644 mozilla/rdf/src/remstore.c delete mode 100644 mozilla/rdf/src/remstore.h delete mode 100644 mozilla/rdf/src/utils.c delete mode 100644 mozilla/rdf/src/utils.h delete mode 100644 mozilla/rdf/src/vocab.c delete mode 100644 mozilla/rdf/src/vocabint.h diff --git a/mozilla/rdf/src/README b/mozilla/rdf/src/README deleted file mode 100644 index 8f63f98caac..00000000000 --- a/mozilla/rdf/src/README +++ /dev/null @@ -1,7 +0,0 @@ -The contents of this directory are obsolete, and will be removed as -soon as it is determined that they are no longer useful. Please see -rdf/base, rdf/build, rdf/content, and rdf/datasource. - -Thank you. -The Management - diff --git a/mozilla/rdf/src/bmk2rdf.c b/mozilla/rdf/src/bmk2rdf.c deleted file mode 100644 index 1ad568fdb3b..00000000000 --- a/mozilla/rdf/src/bmk2rdf.c +++ /dev/null @@ -1,606 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* Reading bookmarks.htm into rdf. - tags in the bookmark file. - - <H1> - <H3> - <DL></DL> - <DT> - <P> - - <DT> indicates that an item is coming. - If the next item is an <a then we have a url - If the next item is a h3, we have a folder. - <DL> indicates that the previous item (which should have been a folder) - is the parent of the next set. - </DL> indicates pop out a level - <P> ignore this on reading, but write out one after each <DL> - <DD> the description for the previous <DT> - - Category urls. Make it up out of the add dates. */ - - -/* - This file translates netscape bookmarks into the rdf data model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - - -#include "bmk2rdf.h" - -#ifdef MOZILLA_CLIENT - - /* extern declarations */ -PR_PUBLIC_API(void) HT_WriteOutAsBookmarks (RDF r, PRFileDesc *fp, RDF_Resource u); /* XXX this should be elsewhere */ -extern char *gBookmarkURL; -RDF gNCDB; - - /* globals */ -uint16 separatorCounter = 0; -static char* gBkFolderDate; -static RDFT gBMKStore = 0; -extern int RDF_PERSONAL_TOOLBAR_NAME; - -RDF_Resource -createSeparator(void) -{ - char url[50]; - RDF_Resource sep; - PR_snprintf(url, 50, "separator%i", separatorCounter++); - sep = RDF_GetResource(NULL, url, 1); - return sep; -} - -#endif - -RDF_Resource -createContainer (char* id) -{ - RDF_Resource r = RDF_GetResource(NULL, id, true); - setContainerp(r, 1); - return r; -} - - - -#ifdef MOZILLA_CLIENT - -char * -resourceDescription (RDF rdf, RDF_Resource r) -{ - return (char*)RDF_GetSlotValue(rdf, r, gWebData->RDF_description, RDF_STRING_TYPE, false, true); -} - - - -char * -resourceLastVisitDate (RDF rdf, RDF_Resource r) -{ - return (char*)RDF_GetSlotValue(rdf, r, gWebData->RDF_lastVisitDate, RDF_STRING_TYPE, false, true); -} - - - -char * -resourceLastModifiedDate (RDF rdf, RDF_Resource r) -{ - return (char*)RDF_GetSlotValue(rdf, r, gWebData->RDF_lastModifiedDate, RDF_STRING_TYPE, false, true); -} - - - -void -parseNextBkBlob (RDFFile f, char* blob, int32 size) -{ - int32 n, last, m; - PRBool somethingseenp = false; - n = last = 0; - - while (n < size) { - char c = blob[n]; - m = 0; - somethingseenp = false; - memset(f->line, '\0', f->lineSize); - if (f->holdOver[0] != '\0') { - memcpy(f->line, f->holdOver, RDF_STRLEN(f->holdOver)); - m = RDF_STRLEN(f->holdOver); - somethingseenp = true; - memset(f->holdOver, '\0', RDF_BUF_SIZE); - } - while ((m < 300) && (c != '<') && (c != '>') && (n < size)) { - f->line[m] = c; - m++; - somethingseenp = (somethingseenp || ((c != ' ') && (c != '\r') && (c != '\n'))); - n++; - c = blob[n]; - } - if (c == '>') f->line[m] = c; - n++; - if (m > 0) { - if ((c == '<') || (c == '>')) { - last = n; - if (c == '<') f->holdOver[0] = '<'; - if (somethingseenp == true) parseNextBkToken(f, f->line); - } else if (size > last) { - memcpy(f->holdOver, f->line, m); - } - } else if (c == '<') f->holdOver[0] = '<'; - } -} - - - -void -parseNextBkToken (RDFFile f, char* token) -{ - /* printf(token); */ - if (token[0] == '<') { - bkStateTransition(f, token); - } else { - /* ok, we have a piece of content. - can be the title, or a description or */ - if ((f->status == IN_TITLE) || (f->status == IN_H3) || - (f->status == IN_ITEM_TITLE)) { - if (IN_H3 && gBkFolderDate) { - char *url; - RDF_Resource newFolder; - url = PR_smprintf("%s%s.rdf", gBkFolderDate, token); - newFolder = createContainer(url); - free(url); - addSlotValue(f,newFolder, gCoreVocab->RDF_parent, f->stack[f->depth-1], - RDF_RESOURCE_TYPE, NULL); - freeMem(gBkFolderDate); - gBkFolderDate = NULL; - f->lastItem = newFolder; - } - if ((f->db == gLocalStore) || (f->status != IN_TITLE)) - { - addSlotValue(f, f->lastItem, gCoreVocab->RDF_name, - copyString(token), RDF_STRING_TYPE, NULL); - } - - if (startsWith("Personal Toolbar", token) && (containerp(f->lastItem))) - addSlotValue(f, f->lastItem, gCoreVocab->RDF_instanceOf, - gNavCenter->RDF_PersonalToolbarFolderCategory, - RDF_RESOURCE_TYPE, "true"); - - } else if (f->status == IN_ITEM_DESCRIPTION) { - addDescription(f, f->lastItem, token); - } - } -} - - - -void -addDescription (RDFFile f, RDF_Resource r, char* token) -{ - char* desc = (char*) remoteStoreGetSlotValue(gLocalStore, r, gWebData->RDF_description, - RDF_STRING_TYPE, false, true); - if (desc == NULL) { - addSlotValue(f, f->lastItem, gWebData->RDF_description, - copyString(token), - RDF_STRING_TYPE, NULL); - } else { - addSlotValue(f, f->lastItem, gWebData->RDF_description, - append2Strings(desc, token), RDF_STRING_TYPE, NULL); - remoteUnassert(gLocalStore, f->lastItem, gWebData->RDF_description, desc, RDF_STRING_TYPE); - } -} - - - -void -bkStateTransition (RDFFile f, char* token) -{ - if (startsWith("<A", token)) { - newLeafBkItem(f, token); - f->status = IN_ITEM_TITLE; - } else if (startsWith(OPEN_H3_STRING, token)) { - newFolderBkItem(f, token); - f->status = IN_H3; - } else if (startsWith(OPEN_TITLE_STRING, token)) { - f->status = IN_TITLE; - } else if (startsWith(OPEN_H3_STRING, token)) { - f->status = IN_H3; - } else if (startsWith(DD_STRING, token)) { - if (remoteStoreGetSlotValue(gLocalStore, f->lastItem, gWebData->RDF_description, - RDF_STRING_TYPE, false, true) - == NULL) f->status = IN_ITEM_DESCRIPTION; - } else if (startsWith(OPEN_DL_STRING, token)) { - f->stack[f->depth++] = f->lastItem; - } else if (startsWith(CLOSE_DL_STRING, token)) { - f->depth--; - } else if (startsWith("<HR>", token)) { - addSlotValue(f, createSeparator(), gCoreVocab->RDF_parent, f->stack[f->depth-1], - RDF_RESOURCE_TYPE, NULL); - f->status = 0; - } else if ((f->status == IN_ITEM_DESCRIPTION) && (startsWith("<BR>", token))) { - addDescription(f, f->lastItem, token); - } else f->status = 0; -} - - - -void -newFolderBkItem(RDFFile f, char* token) -{ - int16 start, end; - start = charSearch('"', token); - end = revCharSearch('"', token); - token[end] = '\0'; - gBkFolderDate = copyString(&token[start+1]); -} - - - -void -newLeafBkItem (RDFFile f, char* token) -{ - /* char buffer[128]; */ - struct tm *time; - uint32 dateVal; - char* url = NULL; - char* addDate = NULL; - char* lastVisit = NULL; - char* lastModified = NULL; - uint8 current = 0; - int32 len = RDF_STRLEN(token); - int32 n = 0; - char c = token[n++]; - PRBool inString = false; - RDF_Resource newR; - - while (n < len) { - if (c == '"') { - if (inString) { - token[n-1] = '\0'; - inString = false; - } else { - inString = true; - if (current == 0) { - url = &token[n]; - } else if (current == 1) { - addDate = &token[n]; - } else if (current == 2) { - lastVisit = &token[n]; - } else if (current == 3) { - lastModified = &token[n]; - } - current++; - } - } - c = token[n++]; - } - if (url == NULL) return; - newR = RDF_GetResource(NULL, url, true); - addSlotValue(f, newR, gCoreVocab->RDF_parent, f->stack[f->depth-1], - RDF_RESOURCE_TYPE, NULL); - /* addSlotValue(f, newR, gWebData->RDF_URL, (void*)copyString(url), - RDF_STRING_TYPE, true); */ - if (addDate != NULL) - { - dateVal = atol(addDate); - if ((time = localtime((time_t *) &dateVal)) != NULL) - { - /* xxx -#ifdef XP_MAC - time->tm_year += 4; - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#endif - - addSlotValue(f, newR, gNavCenter->RDF_bookmarkAddDate, - (void*)copyString(buffer), RDF_STRING_TYPE, NULL); - */ - } - } - if (lastVisit != NULL) - { - dateVal = atol(lastVisit); - if ((time = localtime((time_t *) &dateVal)) != NULL) - { - /* xxx -#ifdef XP_MAC - time->tm_year += 4; - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#endif - addSlotValue(f, newR, gWebData->RDF_lastVisitDate, - (void*)copyString(buffer), RDF_STRING_TYPE, NULL); - */ - } - } - if (lastModified != NULL) - { - dateVal = atol(lastModified); - if ((time = localtime((time_t *) &dateVal)) != NULL) - { - /* xxx -#ifdef XP_MAC - time->tm_year += 4; - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#endif - addSlotValue(f, newR, gWebData->RDF_lastModifiedDate, - (void*)copyString(buffer), RDF_STRING_TYPE, NULL); - */ - } - } - f->lastItem = newR; -} - - - -char * -numericDate(char *url) -{ - char *date = NULL; - int len=0; - - if (!url) return NULL; - while (url[len]) - { - if (!isdigit(url[len])) break; - ++len; - } - if (len > 0) - { - if ((date = getMem(len+1)) != NULL) - { - strncpy(date, url, len); - } - } - return(date); -} - - - -PRBool -bookmarkSlotp (RDF_Resource s) -{ - return ((s == gCoreVocab->RDF_parent) || (s == gWebData->RDF_lastVisitDate) || (s == gWebData->RDF_description) || - (s == gNavCenter->RDF_bookmarkAddDate) || (s == gWebData->RDF_lastModifiedDate) || - (s == gCoreVocab->RDF_name)); -} - - -void -HT_WriteOutAsBookmarks1 (RDF rdf, PRFileDesc *fp, RDF_Resource u, RDF_Resource top, int indent) -{ - RDF_Cursor c = RDF_GetSources(rdf, u, gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, true); - RDF_Resource next; - char *date, *name, *url; - int loop; - - if (c == NULL) return; - if (u == top) { - name = RDF_GetResourceName(rdf, u); - ht_rjcprintf(fp, "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n", NULL); - ht_rjcprintf(fp, "<!-- This is an automatically generated file.\n", NULL); - ht_rjcprintf(fp, "It will be read and overwritten.\n", NULL); - ht_rjcprintf(fp, "Do Not Edit! -->\n", NULL); - - ht_rjcprintf(fp, "<TITLE>%s\n", (name) ? name:""); - ht_rjcprintf(fp, "

%s

\n

\n", (name) ? name:""); - } - while ((next = RDF_NextValue(c)) != NULL) { - - url = resourceID(next); - if (containerp(next) && (!startsWith("ftp:",url)) && (!startsWith("file:",url)) - && (!startsWith("IMAP:", url)) && (!startsWith("nes:", url)) - && (!startsWith("mail:", url)) && (!startsWith("cache:", url)) - && (!startsWith("ldap:", url))) { - for (loop=0; loop

", (date) ? date:""); - if (date) freeMem(date); - name = RDF_GetResourceName(rdf, next); - ht_rjcprintf(fp, "%s

\n", name); - - for (loop=0; loop

\n", NULL); - HT_WriteOutAsBookmarks1(rdf, fp, next, top, indent+1); - - for (loop=0; loop

\n", NULL); - } - else if (isSeparator(next)) { - for (loop=0; loop\n", NULL); - } - else { - char* bkAddDate = (char*)RDF_GetSlotValue(rdf, next, - gNavCenter->RDF_bookmarkAddDate, - RDF_STRING_TYPE, false, true); - - for (loop=0; loop", resourceLastModifiedDate(rdf, next)); - ht_rjcprintf(fp, "%s\n", RDF_GetResourceName(rdf, next)); - - if (resourceDescription(rdf, next) != NULL) { - ht_rjcprintf(fp, "

%s\n", resourceDescription(rdf, next)); - } - } - } - RDF_DisposeCursor(c); - if (u == top) { - ht_rjcprintf(fp, "
\n", NULL); - } -} - - - -PR_PUBLIC_API(void) -HT_WriteOutAsBookmarks (RDF r, PRFileDesc *fp, RDF_Resource u) -{ - HT_WriteOutAsBookmarks1 (r, fp, u, u, 1); -} - - - -void -flushBookmarks() -{ - PRFileDesc *bkfp; - - if (gBookmarkURL != NULL) - { - /* - delete bookmark.htm as PROpen() with PR_TRUNCATE appears broken (at least on Mac) - */ - CallPRDeleteFileUsingFileURL(gBookmarkURL); - - if ((bkfp = CallPROpenUsingFileURL(gBookmarkURL, (PR_WRONLY|PR_CREATE_FILE|PR_TRUNCATE), - 0644)) != NULL) - { - HT_WriteOutAsBookmarks(gNCDB, bkfp, gNavCenter->RDF_BookmarkFolderCategory); - PR_Close(bkfp); - } - } -} - - -PRBool -ResourceBelongsToBookmarksp (RDF_Resource r, int32 depth) { - if (depth > 20) { - return false; - } else if (r == gNavCenter->RDF_BookmarkFolderCategory) { - return 1; - } else if (containerp(r)) { - Assertion as = r->rarg1; - while (as) { - if ((as->db == gBMKStore) && - (as->s == gCoreVocab->RDF_parent) && - (as->tv == 1) && - (ResourceBelongsToBookmarksp((RDF_Resource)as->value, depth+1))) return 1; - as = as->next; - } - return 0; - } else return 0; -} - - - -PRBool remoteAssert3 (RDFFile fi, RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv); -PRBool remoteUnassert3 (RDFFile fi, RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type); - - -PRBool -bmkUnassert (RDFT mcf, RDF_Resource u, RDF_Resource s, - void* v, RDF_ValueType type) { - if (ResourceBelongsToBookmarksp(u, 0)) { - return (remoteStoreRemove(mcf, u, s, v, type) != NULL); - } else return 0; -} - - -PRBool -bmkAssert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) { - if (ResourceBelongsToBookmarksp(u, 0)) { - return (remoteStoreAdd(mcf, u, s, v, type, tv) != NULL); - } else return 0; -} - -extern RDF_Resource gPTFolder; -void -readInBookmarks() -{ - /* RDF_Resource ptFolder; */ - - /* XXX use rdf:bookmarks to get the demo up and running. I have no - clue what the difference is. */ - - /* RDF_Resource bmk = RDF_GetResource(NULL, "NC:Bookmarks", true); */ - RDF_Resource bmk = RDF_GetResource(NULL, "rdf:bookmarks", true); - RDFFile f = makeRDFFile(gBookmarkURL, bmk, true); - PRFileDesc *fp; - int32 len; - char buf[512]; - f->fileType = RDF_BOOKMARKS; - f->db = gBMKStore; - f->assert = remoteAssert3; - - fp = CallPROpenUsingFileURL(f->url, PR_RDONLY|PR_CREATE_FILE, 0644); - if (fp == NULL) return; - while((len=PR_Read(fp, buf, sizeof(buf))) >0) { - parseNextBkBlob(f, buf, len); - } - - gPTFolder = remoteStoreGetSlotValue(f->db, - gNavCenter->RDF_PersonalToolbarFolderCategory, - gCoreVocab->RDF_instanceOf, RDF_RESOURCE_TYPE, true, true); - - if (gPTFolder == NULL) { - if ((gPTFolder = createContainer("personaltoolbar.rdf")) != NULL) { - addSlotValue(f, gPTFolder, gCoreVocab->RDF_instanceOf, - gNavCenter->RDF_PersonalToolbarFolderCategory, - RDF_RESOURCE_TYPE, "true"); - addSlotValue(f, gPTFolder, gCoreVocab->RDF_name, - copyString("Personal Toolbar"), - RDF_STRING_TYPE, "true"); - RDFUtil_SetPTFolder(gPTFolder); - } - } - - PR_Close(fp); - freeMem(f->line); - freeMem(f->currentSlot); - freeMem(f->holdOver); -} - - -RDFT -MakeBMKStore (char* url) -{ - if (startsWith("rdf:bookmarks", url)) { - if (gBMKStore == 0) { - RDFT ntr = gBMKStore = NewRemoteStore(url); - ntr->assert = bmkAssert; - ntr->unassert = bmkUnassert; - readInBookmarks(); - return ntr; - } else return gBMKStore; - } else return NULL; -} - - -#endif diff --git a/mozilla/rdf/src/bmk2rdf.h b/mozilla/rdf/src/bmk2rdf.h deleted file mode 100644 index 6abe8ffef97..00000000000 --- a/mozilla/rdf/src/bmk2rdf.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef _RDF_BMK2MCF_H_ -#define _RDF_BMK2MCF_H_ - - -#include "rdf.h" -#include "rdf-int.h" -#include "vocab.h" -#include "utils.h" -#include "glue.h" -#include "time.h" -#include "stdio.h" -#include "ctype.h" - - -/* bmk2mcf.c data structures and defines */ - -#define OPEN_TITLE_STRING "" -#define CLOSE_TITLE_STRING "" -#define OPEN_H1_STRING "

" -#define CLOSE_H1_STRING "

" -#define OPEN_H3_STRING "" -#define OPEN_DL_STRING "
" -#define CLOSE_DL_STRING "
" -#define DT_STRING "
" -#define PAR_STRING "

" -#define DD_STRING "

" - -#define IN_TITLE 1 -#define IN_H3 5 -#define IN_ITEM_TITLE 7 -#define IN_ITEM_DESCRIPTION 9 - - - -/* bmk2mcf.c function prototypes */ - - - -RDF_Resource createSeparator(void); -RDF_Resource createContainer (char* id); -char * resourceDescription (RDF rdf, RDF_Resource r); -char * resourceLastVisitDate (RDF rdf, RDF_Resource r); -char * resourceLastModifiedDate (RDF rdf, RDF_Resource r); -void parseNextBkBlob (RDFFile f, char* blob, int32 size); -void parseNextBkToken (RDFFile f, char* token); -void addDescription (RDFFile f, RDF_Resource r, char* token); -void bkStateTransition (RDFFile f, char* token); -void newFolderBkItem(RDFFile f, char* token); -void newLeafBkItem (RDFFile f, char* token); -char * numericDate(char *url); -void HT_WriteOutAsBookmarks1 (RDF rdf, PRFileDesc *fp, RDF_Resource u, RDF_Resource top, int indent); -void flushBookmarks(); -RDFT MakeBMKStore (char* url); - - - -#endif diff --git a/mozilla/rdf/src/columns.c b/mozilla/rdf/src/columns.c deleted file mode 100644 index e9d5e444b2f..00000000000 --- a/mozilla/rdf/src/columns.c +++ /dev/null @@ -1,284 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file synthesizes default columns for a given node. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#include "columns.h" - - - -RDF_Cursor -ColumnsGetSlotValues (RDFT rdf, RDF_Resource u, RDF_Resource s, - RDF_ValueType type, PRBool inversep, PRBool tv) -{ - RDF_Cursor c; - - if (!containerp(u) || (s != gNavCenter->RDF_Column) || (inversep) || - (!tv) || (type != RDF_RESOURCE_TYPE)) - { - return(NULL); - } - if ((c = (RDF_Cursor)getMem(sizeof(struct RDF_CursorStruct))) != NULL) - { - c->u = u; - c->value = NULL; - c->count = 0; - } - return(c); -} - - - -void * -ColumnsGetSlotValue(RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, - PRBool inversep, PRBool tv) -{ - void *val = NULL; - - if (u == NULL) return(NULL); - - if ((s == gCoreVocab->RDF_name) && (type == RDF_STRING_TYPE) - && (!inversep) && (tv)) - { -#ifdef XXX - if (u == gCoreVocab->RDF_name) val = copyString(XP_GetString(RDF_NAME_STR)); - else if (u == gNavCenter->RDF_URLShortcut) val = copyString(XP_GetString(RDF_SHORTCUT_STR)); - else if (u == gWebData->RDF_URL) val = copyString(XP_GetString(RDF_URL_STR)); - else if (u == gWebData->RDF_description) val = copyString(XP_GetString(RDF_DESCRIPTION_STR)); - else if (u == gWebData->RDF_firstVisitDate) val = copyString(XP_GetString(RDF_FIRST_VISIT_STR)); - else if (u == gWebData->RDF_lastVisitDate) val = copyString(XP_GetString(RDF_LAST_VISIT_STR)); - else if (u == gWebData->RDF_numAccesses) val = copyString(XP_GetString(RDF_NUM_ACCESSES_STR)); - else if (u == gWebData->RDF_creationDate) val = copyString(XP_GetString(RDF_CREATED_ON_STR)); - else if (u == gWebData->RDF_lastModifiedDate) val = copyString(XP_GetString(RDF_LAST_MOD_STR)); - else if (u == gWebData->RDF_size) val = copyString(XP_GetString(RDF_SIZE_STR)); - else if (u == gNavCenter->RDF_bookmarkAddDate) val = copyString(XP_GetString(RDF_ADDED_ON_STR)); -#endif - } - else if ((s == gNavCenter->RDF_ColumnDataType) && - (type == RDF_INT_TYPE) && (!inversep) && (tv)) - { - if (u == gNavCenter->RDF_bookmarkAddDate || - u == gWebData->RDF_firstVisitDate || - u == gWebData->RDF_lastVisitDate || - u == gWebData->RDF_lastModifiedDate || - u == gWebData->RDF_creationDate) - { - val = (void *)HT_COLUMN_STRING; - } - else if (u == gWebData->RDF_size || - u == gWebData->RDF_numAccesses || - u == gNavCenter->cookieDomain || - u == gNavCenter->cookieSecure) - { - val = (void *)HT_COLUMN_INT; - } - else - { - /* default to string... XXX wrong thing to do? */ - val = (void *)HT_COLUMN_STRING; - } - } - else if ((s == gNavCenter->RDF_ColumnWidth) && - (type == RDF_INT_TYPE) && (!inversep) && (tv)) - { - if (u == gCoreVocab->RDF_name) val = (void *)128L; - else if (u == gWebData->RDF_URL) val = (void *)200L; - else val = (void *)80; - } - return(val); -} - - - -void * -ColumnsNextValue (RDFT rdf, RDF_Cursor c) -{ - void *arc = NULL; - - PR_ASSERT(c != NULL); - if (c == NULL) return(NULL); - - switch( resourceType(c->u) ) - { - case RDF_RT: - if ((c->u == gNavCenter->RDF_Sitemaps) || (c->u == gNavCenter->RDF_Mail)) - { - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gWebData->RDF_URL; break; - } - } - else do - { - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: - if ((idenEqual(c->u, gNavCenter->RDF_BookmarkFolderCategory)) || - ((!startsWith("http://", resourceID(c->u))) && endsWith(".rdf", resourceID(c->u)))) - { - arc = gNavCenter->RDF_URLShortcut; - } - else - { - /* disallow shortcuts from external RDF graphs, so skip to next column */ - arc = NULL; - ++(c->count); - } - break; - - case 2: arc = gWebData->RDF_URL; break; - case 3: arc = gWebData->RDF_description; break; - case 4: arc = gWebData->RDF_keyword; break; - case 5: arc = gNavCenter->RDF_bookmarkAddDate; break; - case 6: arc = gWebData->RDF_lastVisitDate; break; - case 7: arc = gWebData->RDF_lastModifiedDate; break; - case 8: arc = gNavCenter->pos; break; - } - } while ((c->count <= 6) && (arc == NULL)); - break; - - - - case HISTORY_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gWebData->RDF_URL; break; - case 2: arc = gWebData->RDF_firstVisitDate; break; - case 3: arc = gWebData->RDF_lastVisitDate; break; - case 4: arc = NULL; break; - case 5: arc = gWebData->RDF_numAccesses; break; - } - break; - - case COOKIE_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gNavCenter->cookieHost; break; - case 2: arc = gNavCenter->cookiePath; break; - case 3: arc = gNavCenter->cookieValue; break; - case 4: arc = gNavCenter->cookieExpires; break; - case 5: arc = gNavCenter->cookieDomain; break; - case 6: arc = gNavCenter->cookieSecure; break; - } - break; - - - case FTP_RT: - case ES_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gWebData->RDF_URL; break; - case 2: arc = gWebData->RDF_description; break; - case 3: arc = gWebData->RDF_size; break; - case 4: arc = gWebData->RDF_lastModifiedDate; break; - } - break; - - case LFS_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gWebData->RDF_URL; break; - case 2: arc = gWebData->RDF_description; break; - case 3: arc = gWebData->RDF_size; break; - case 4: arc = gWebData->RDF_lastModifiedDate; break; - case 5: arc = gWebData->RDF_creationDate; break; - } - break; - - case LDAP_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - } - break; - - case PM_RT: - case IM_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gWebData->RDF_URL; break; - } - break; - - case SEARCH_RT: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - case 1: arc = gNavCenter->RDF_URLShortcut; break; - case 2: arc = gWebData->RDF_URL; break; - case 3: arc = gWebData->RDF_description; break; - case 4: arc = gWebData->RDF_keyword; break; - } - break; - - default: - switch(c->count) - { - case 0: arc = gCoreVocab->RDF_name; break; - } - break; - } - ++(c->count); - return(arc); -} - - - -RDF_Error -ColumnsDisposeCursor (RDFT rdf, RDF_Cursor c) -{ - if (c != NULL) - { - freeMem(c); - } - return(0); -} - - - -RDFT -MakeColumnStore (char* url) -{ - RDFT ntr = NULL; - - if (strstr(url, "rdf:columns")) - { - if ((ntr = (RDFT)getMem(sizeof(struct RDF_TranslatorStruct))) != NULL) - { - ntr->getSlotValues = ColumnsGetSlotValues; - ntr->getSlotValue = ColumnsGetSlotValue; - ntr->nextValue = ColumnsNextValue; - ntr->disposeCursor = ColumnsDisposeCursor; - ntr->url = copyString(url); - } - - } - - return(ntr); -} diff --git a/mozilla/rdf/src/columns.h b/mozilla/rdf/src/columns.h deleted file mode 100644 index e0fa0084d85..00000000000 --- a/mozilla/rdf/src/columns.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef _RDF_COLUMNS_H_ -#define _RDF_COLUMNS_H_ - - -#include "rdf-int.h" -#include "htrdf.h" -#include "utils.h" - - - -/* columns.c data structures */ - -extern int RDF_NAME_STR, RDF_SHORTCUT_STR, RDF_URL_STR, RDF_DESCRIPTION_STR; -extern int RDF_FIRST_VISIT_STR, RDF_LAST_VISIT_STR, RDF_NUM_ACCESSES_STR; -extern int RDF_CREATED_ON_STR, RDF_LAST_MOD_STR, RDF_SIZE_STR, RDF_ADDED_ON_STR; - - -/* columns.c function prototypes */ - -NSPR_BEGIN_EXTERN_C - -RDF_Cursor ColumnsGetSlotValues (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv); -void * ColumnsGetSlotValue(RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv); -void * ColumnsNextValue (RDFT rdf, RDF_Cursor c); -RDF_Error ColumnsDisposeCursor (RDFT rdf, RDF_Cursor c); -RDFT MakeColumnStore (char* url); - -NSPR_END_EXTERN_C - -#endif diff --git a/mozilla/rdf/src/core.c b/mozilla/rdf/src/core.c deleted file mode 100644 index 79dfb38a9c4..00000000000 --- a/mozilla/rdf/src/core.c +++ /dev/null @@ -1,1123 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file (which should probably be called rdf.c) implements the - core rdf query mechanism. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#include "core.h" - -#ifdef DEBUG_guha -#define SMART_MAIL 1 -#endif - - - /* globals */ -RDFL gAllDBs = 0; - - - -RDFT -getTranslator (char* url) -{ - RDFT ans = PL_HashTableLookup(dataSourceHash, url); - if (ans) return ans; - if (startsWith(url, "rdf:localStore")) { - ans = MakeLocalStore(url); - } else if (startsWith(url, "rdf:remoteStore")) { - ans = MakeRemoteStore(url); - } else if (startsWith(url, "rdf:bookmarks")) { - ans = MakeBMKStore(url); - } else if (strstr(url, ".rdf") || strstr(url, ".RDF") || - strstr(url, ".mcf") || strstr(url, ".MCF")) { - ans = MakeFileDB(url); - } else if (startsWith("rdf:columns", url)) { - ans = MakeColumnStore (url); - } else if (startsWith("rdf:ht", url) || startsWith("rdf:scook", url)) { - ans = MakeSCookDB(url); -#ifdef XPCOM_XXX - } else if (startsWith("rdf:CookieStore", url)) { - ans = MakeCookieStore(url); -#endif - } else if (startsWith("http://", url)) { - ans = MakeFileDB(url); - } else { - ans = NULL; - } - if (ans) PL_HashTableAdd(dataSourceHash, ans->url, ans); - return ans; -} - - - -PR_PUBLIC_API(RDF) -RDF_GetDB (const char** dataSources) { - int32 n = 0; - int32 m = 0; - char* next ; - RDF r = (RDF) getMem(sizeof(struct RDF_DBStruct)) ; - RDFL nrl = (RDFL)getMem(sizeof(struct RDF_ListStruct)); - while (*(dataSources + n++)) {} - r->translators = (RDFT*)getMem((n) * sizeof(RDFT)); - n = 0; - while ((next = (char*) *(dataSources + n)) != NULL) { - RDFL rl = (RDFL)getMem(sizeof(struct RDF_ListStruct)); - r->translators[m] = getTranslator(next); - if (r->translators[m] != NULL) { - rl->rdf = r; - rl->next = r->translators[m]->rdf; - r->translators[m]->rdf = rl; - m++; - } else { - freeMem(rl); - /* r->numTranslators = m; - r->translatorArraySize = n; - RDF_ReleaseDB(r); - return NULL; */ - } - n++; - } - r->numTranslators = m; - r->translatorArraySize = n; - nrl->rdf = r; - nrl->next = gAllDBs; - gAllDBs = nrl; - return r; -} - - - -PR_PUBLIC_API(RDFT) -RDF_AddDataSource(RDF rdf, char* dataSource) -{ - RDFT newDB; - int32 n = 0; - RDFT next; - while (((next = rdf->translators[n++]) != NULL) && (n < rdf->numTranslators)) { - if (RDF_STRCMP(next->url, dataSource) == 0) return next; - } - if (rdf->numTranslators >= rdf->translatorArraySize) { - RDFT* tmp = (RDFT*)getMem((rdf->numTranslators+5)*(sizeof(RDFT))); - memcpy(tmp, rdf->translators, (rdf->numTranslators * sizeof(RDFT))); - rdf->translatorArraySize = rdf->numTranslators + 5; - freeMem(rdf->translators); - rdf->translators = tmp; - } - newDB = getTranslator(dataSource); - if (!newDB) { - return NULL; - } else { - RDFL rl = (RDFL)getMem(sizeof(struct RDF_ListStruct)); - RDFT tr = rdf->translators[rdf->numTranslators]; - rl->rdf = rdf; - rl->next = newDB->rdf; - newDB->rdf = rl; - rdf->translators[rdf->numTranslators] = newDB; - rdf->numTranslators++; - return newDB; - } -} - - - -PR_PUBLIC_API(RDF_Error) -RDF_ReleaseDataSource(RDF rdf, RDFT dataSource) -{ - RDFT* temp = (RDFT*)getMem((rdf->numTranslators-1)*(sizeof(RDFT))); - int32 m = 0; - int32 n= 0; - RDFT next; - while ((next = rdf->translators[n++]) != NULL) { - if (next != dataSource) { - *(temp + m++) = (RDFT) next; - } - } - memset(rdf->translators, '\0', sizeof(RDFT) * rdf->numTranslators); - memcpy(rdf->translators, temp, sizeof(RDFT) * (rdf->numTranslators -1)); - rdf->numTranslators--; - dataSource->rdf = deleteFromRDFList(dataSource->rdf, rdf); - if ((dataSource->rdf == NULL) && (dataSource->destroy != NULL)) { - PL_HashTableRemove(dataSourceHash, dataSource->url); - (*dataSource->destroy)(dataSource); - } - return 0; -} - - - -RDFL -deleteFromRDFList (RDFL xrl, RDF db) -{ - RDFL rl = xrl; - RDFL prev = rl; - while (rl) { - if (rl->rdf == db) { - if (prev == rl) { - RDFL ans = rl->next; - freeMem(rl); - return ans; - } else { - prev->next = rl->next; - freeMem(rl); - return xrl; - } - } - prev = rl; - rl = rl->next; - } - return xrl; -} - - - -void -disposeAllDBs () -{ - while (gAllDBs) { - RDF_ReleaseDB(gAllDBs->rdf); - } -} - - - -PR_PUBLIC_API(RDF_Error) -RDF_ReleaseDB(RDF rdf) -{ - if (rdf != NULL) { - uint32 n = 0; - uint32 size = rdf->numTranslators; - while (n < size) { - RDFT rdft = (*((RDFT*)rdf->translators + n)); - RDFL rlx ; - if (rdft) { - rlx = rdft->rdf; - rdft->rdf = deleteFromRDFList(rlx, rdf); - if (rdft->rdf == NULL) callExitRoutine(n, rdf); - } - n++; - } - gAllDBs = deleteFromRDFList(gAllDBs, rdf); - } - - freeMem(rdf->translators); - freeMem(rdf); - return noRDFErr; -} - - - -RDF_Resource -addDep (RDF db, RDF_Resource u) -{ - - if (db) { - RDFL rl = u->rdf; - while (rl) { - if (rl->rdf == db) return u; - rl = rl->next; - } - rl = (RDFL) getMem(sizeof(struct RDF_ListStruct)); - rl->rdf = db; - rl->next = u->rdf; - u->rdf = rl; - return u; - } - return u; -} - - - -PRBool -rdfassert(RDF rdf, RDF_Resource u, RDF_Resource s, void* value, - RDF_ValueType type, PRBool tv) -{ - int32 size = rdf->numTranslators; - int32 n = size -1; - - /* XXX - what happens here if there is no local store? */ - if ((size > 1) && (callHasAssertions(0, rdf, u, s, value, type, (!tv)))) { - setLockedp(u, 1); - callUnassert(0, rdf, u, s, value, type); - setLockedp(u, 0); - if (RDF_HasAssertion(rdf, u, s, value, type, tv)) return 1; - } - while (n > -1) { - if (callAssert(n, rdf, u, s, value, type, tv)) return 1; - n--; - } - return 0; -} - - - - -PR_PUBLIC_API(PRBool) -RDF_Assert (RDF rdf, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type) -{ - return rdfassert(rdf, u, s, value, type, 1); -} - - - -PR_PUBLIC_API(PRBool) -RDF_AssertFalse (RDF rdf, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type) -{ - return rdfassert(rdf, u, s, value, type, 0); -} - - - -PR_PUBLIC_API(PRBool) -RDF_CanAssert(RDF r, RDF_Resource u, RDF_Resource s, - void* v, RDF_ValueType type) -{ - return true; -} - - - -PR_PUBLIC_API(PRBool) -RDF_CanAssertFalse(RDF r, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) -{ - return true; -} - - - -PR_PUBLIC_API(PRBool) -RDF_CanUnassert(RDF r, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) -{ - return true; -} - - - -PR_PUBLIC_API(PRBool) -RDF_Unassert (RDF rdf, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type) -{ - PRBool allok = 1; - int32 size = rdf->numTranslators; - int32 n = 0; - - setLockedp(u, 1); - while (allok && (n < size)) { - if (callHasAssertions(n, rdf, u, s, value, type, 1)) { - allok = callUnassert(n, rdf, u, s, value, type); - } - n++; - } - if (!allok) allok = callAssert(0, rdf, u, s, value, type, 0); - setLockedp(u, 0); - return allok; -} - - - -PRBool -containerIDp(char* id) -{ - return (endsWith(".rdf", id) || (endsWith(".mco", id)) || (endsWith(".mcf", id)) || - strstr(id, ".rdf#")); -} - - - -char * -makeNewID () -{ - PRTime tm = PR_Now(); - char *id; - -#ifndef HAVE_LONG_LONG - double doubletm; -#endif /* !HAVE_LONG_LONG */ - - - id = (char *)getMem(ID_BUF_SIZE); - -#ifdef HAVE_LONG_LONG - PR_snprintf(id, ID_BUF_SIZE, "%1.0f", (double)tm); -#else - LL_L2D(doubletm, tm); - PR_snprintf(id, ID_BUF_SIZE, "%1.0f", doubletm); -#endif /* HAVE_LONG_LONG */ - - /* prevent collisions by checking hash. */ - while (PL_HashTableLookup(resourceHash, id) != NULL) - { -#ifdef HAVE_LONG_LONG - tm = tm + (PR_MSEC_PER_SEC * 60); /* fix me - not sure what the increment should be */ - PR_snprintf(id, ID_BUF_SIZE, "%1.0f", (double)tm); -#else - int64 incr; - LL_I2L(incr, (PR_MSEC_PER_SEC * 60)); - LL_ADD(tm, tm, incr); - LL_L2D(doubletm, tm); - PR_snprintf(id, ID_BUF_SIZE, "%1.0f", doubletm); -#endif /* HAVE_LONG_LONG */ - } - return (id); -} - - - -PRBool -iscontainerp (RDF_Resource u) -{ - char* id = resourceID(u); - if (containerIDp(id)) { - return 1; - } -#ifdef MOZILLA_CLIENT - else if (startsWith("file:", id)) { - return (endsWith("/", id) /* || fileDirectoryp(u) */); - } else if (startsWith("ftp:", id) && (endsWith("/", id))) { - return 1; - } else if (startsWith("cache:container", id)) { - return 1; - } else if (startsWith("find:", id)) { - return 1; - } -#endif - else return 0; -} - - - -RDF_BT -resourceTypeFromID (char* id) -{ - if (endsWith(".rdf", id) || (strstr(id, ".rdf#"))) { - return RDF_RT; - } else if (endsWith(".mcf", id) || (strstr(id, ".mcf#"))) { - return RDF_RT; - } else if (endsWith(".mco", id)) { - return RDF_RT; - } else if (startsWith("file:", id)) { - return LFS_RT; - } else if (startsWith("nes:", id)) { - return ES_RT; - } else if (startsWith("ftp:", id)) { - return FTP_RT; - } else if (startsWith("cache:", id)) { - return CACHE_RT; - } else return 0; -} - - - -RDF_Resource -specialUrlResource (char* id) -{ - if (RDF_STRCMP(id, "NC:PersonalToolbar") == 0) - return RDFUtil_GetPTFolder(); - return NULL; -} - - - -RDF_Resource -NewRDFResource (char* id) -{ - RDF_Resource existing; - - if ((existing = (RDF_Resource)getMem(sizeof(struct RDF_ResourceStruct))) != NULL) - { - existing->url = copyString(id); - PL_HashTableAdd(resourceHash, existing->url, existing); - } - return(existing); -} - - - -RDF_Resource -QuickGetResource (char* id) -{ - RDF_Resource existing; - - if ((existing = (RDF_Resource)PL_HashTableLookup(resourceHash, id)) == NULL) - { - existing = NewRDFResource(id); - } - return(existing); -} - - - -PR_PUBLIC_API(RDF_Resource) -RDF_GetResource (RDF db, char* id, PRBool createp) -{ - char* nid = NULL; - RDF_Resource existing = NULL; - if (id == NULL) { - if (!createp) { - return NULL; - } else { - id = nid = makeNewID(); - } - } - existing = specialUrlResource(id); - if (existing) return existing; - existing = (RDF_Resource)PL_HashTableLookup(resourceHash, id); - if (existing) return addDep(db, existing); - if (!createp) return NULL; - existing = NewRDFResource(id); - setResourceType(existing, resourceTypeFromID(id)); - setContainerp(existing, iscontainerp(existing)); - if (nid) freeMem(nid); - return addDep(db, existing); -} - - - - -PR_PUBLIC_API (RDF_Error) -RDF_DeleteAllArcs (RDF rdf, RDF_Resource u) -{ - Assertion as, next; - /* if (u->locked) return -1; */ - as = u->rarg1; - while (as != NULL) { - next = as->next; - remoteStoreRemove(gRemoteStore, as->u, as->s, as->value, as->type); - as = next; - } - as = u->rarg2; - while (as != NULL) { - next = as->invNext; - remoteStoreRemove(gRemoteStore, as->u, as->s, as->value, as->type); - as = next; - } - return 0; -} - -PR_PUBLIC_API(RDF_Error) -RDF_Update(RDF rdf, RDF_Resource u) { - int32 size = rdf->numTranslators; - int32 n = 0; - while (n < size) { - callUpdateRoutine(n, rdf, u); - n++; - } - return 0; -} - - -PR_PUBLIC_API(PRBool) -RDF_HasAssertion (RDF rdf, RDF_Resource u, RDF_Resource s, - void* v, RDF_ValueType type, PRBool tv) -{ - int32 size = rdf->numTranslators; - int32 n = 0; - if (callHasAssertions(0, rdf, u, s, v, type, !tv)) return 0; - while (n < size) { - if (callHasAssertions(n, rdf, u, s, v, type, tv)) return 1; - n++; - } - return 0; -} - - - -PR_PUBLIC_API(void *) -RDF_GetSlotValue (RDF rdf, RDF_Resource u, RDF_Resource s, - RDF_ValueType type, PRBool inversep, PRBool tv) -{ - int32 size = rdf->numTranslators; - int32 n = 0; - if ((s == gWebData->RDF_URL) && (tv) && (!inversep) && (type == RDF_STRING_TYPE)) - return copyString(resourceID(u)); - while (n < size) { - RDFT translator = rdf->translators[n]; - void* ans = callGetSlotValue(n, rdf, u, s, type, inversep, tv); - if ((ans != NULL) && ((n == 0)||(!callHasAssertions(0, rdf, u, s, ans, type, !tv)))) - { - - if (type == RDF_RESOURCE_TYPE) { - return addDep(rdf, ans) ; - } else { - return ans; - } - } - n++; - } - if (s == gCoreVocab->RDF_name && tv && !inversep && type == RDF_STRING_TYPE) - return makeResourceName(u); - return NULL; -} - - - -RDFT -RDFTNamed (RDF rdf, char* name) -{ - int32 size = rdf->numTranslators; - int32 n = 0; - while (n < size) { - char* nn = (*((RDFT*)rdf->translators + n))->url; - if (RDF_STRCMP(nn, name) == 0) return (*((RDFT*)rdf->translators + n)); - n = n + 1; - } - return NULL; -} - - - -RDF_Cursor -getSlotValues (RDF rdf, RDF_Resource u, RDF_Resource s, - RDF_ValueType type, PRBool inversep, PRBool tv) -{ - RDF_Cursor c = (RDF_Cursor) getMem(sizeof(struct RDF_CursorStruct)); - if (c == NULL) return(NULL); - c->u = u; - c->s = s; - c->queryType = RDF_GET_SLOT_VALUES_QUERY; - c->tv = tv; - c->inversep = inversep; - c->type = type; - c->count = -1; - c->rdf = rdf; - c->current = NULL; - while ((c->count < rdf->numTranslators-1) && (!c->current)) { - c->count++; - c->current = callGetSlotValues(c->count, rdf, u, s, type, inversep, tv); - } - if (!c->current) { - freeMem(c); - return NULL; - } else { - return c; - } -} - - - -PR_PUBLIC_API(RDF_Cursor) -RDF_GetTargets (RDF rdfDB, RDF_Resource source, RDF_Resource arcLabel, - RDF_ValueType targetType, PRBool tv) -{ - return getSlotValues(rdfDB, source, arcLabel, targetType, 0, tv); -} - - - -PR_PUBLIC_API(RDF_Cursor) -RDF_GetSources (RDF rdfDB, RDF_Resource target, RDF_Resource arcLabel, - RDF_ValueType sourceType, PRBool tv) -{ - if (sourceType != RDF_RESOURCE_TYPE) return NULL; - return getSlotValues(rdfDB, target, arcLabel, sourceType, 1, tv); -} - - - -PR_PUBLIC_API(RDF_ValueType) -RDF_CursorValueType(RDF_Cursor c) -{ - if (c == NULL) { - return 0; - } else { - return c->type; - } -} - - - -PR_PUBLIC_API(char*) -RDF_ValueDataSource(RDF_Cursor c) -{ - if (c == NULL) { - return NULL; - } else { - RDF rdf = c->rdf; - RDFT rdft; - if (rdf == NULL) return NULL; - rdft = rdf->translators[c->count]; - if (rdft) { - return rdft->url; - } else { - return NULL; - } - } -} - - - -PR_PUBLIC_API(RDF_Cursor) -RDF_ArcLabelsOut (RDF rdfDB, RDF_Resource u) -{ - RDF_Cursor c = (RDF_Cursor) getMem(sizeof(struct RDF_CursorStruct)); - if (c == NULL) return(NULL); - c->u = u; - c->queryType = RDF_ARC_LABELS_OUT_QUERY; - c->type = RDF_RESOURCE_TYPE; - c->count = -1; - c->rdf = rdfDB; - c->current = NULL; - while ((c->count < rdfDB->numTranslators-1) && (!c->current)) { - c->count++; - c->current = callArcLabelsOut(c->count, rdfDB, u); - } - if (!c->current) { - freeMem(c); - return NULL; - } else { - return c; - } -} - - - -PR_PUBLIC_API(RDF_Cursor) -RDF_ArcLabelsIn (RDF rdfDB, RDF_Resource u) -{ - RDF_Cursor c = (RDF_Cursor) getMem(sizeof(struct RDF_CursorStruct)); - if (c == NULL) return(NULL); - c->u = u; - c->queryType = RDF_ARC_LABELS_IN_QUERY; - c->type = RDF_RESOURCE_TYPE; - c->count = -1; - c->rdf = rdfDB; - c->current = NULL; - while ((c->count < rdfDB->numTranslators-1) && (!c->current)) { - c->count++; - c->current = callArcLabelsIn(c->count, rdfDB, u); - } - if (!c->current) { - freeMem(c); - return NULL; - } else { - return c; - } -} - - - -PR_PUBLIC_API(void *) -RDF_NextValue (RDF_Cursor c) -{ - void* ans; - RDF rdf; - if (c == NULL) return NULL; - if (c->queryType == RDF_FIND_QUERY) return nextFindValue(c); - rdf = c->rdf; - ans = (*rdf->translators[c->count]->nextValue)(rdf->translators[c->count], c->current); - while (ans != NULL) { - if ((c->count == 0) || (c->queryType != RDF_GET_SLOT_VALUES_QUERY)) { - if (c->type == RDF_RESOURCE_TYPE) return addDep(c->rdf, ans); - else return ans; - } - if (((!c->inversep) && - (!(callHasAssertions(0, rdf, c->u, c->s, ans, c->type, !c->tv)))) || - ((c->inversep) && - (!(callHasAssertions(0, rdf, (RDF_Resource)ans, c->s, c->u, - c->type, !c->tv))))) { - if (c->type == RDF_RESOURCE_TYPE) { - return addDep(c->rdf, (RDF_Resource)ans); - } else return ans; - } - ans = (*rdf->translators[c->count]->nextValue)(rdf->translators[c->count], c->current); - } - (*rdf->translators[c->count]->disposeCursor)(rdf->translators[c->count], c->current); - c->current = NULL; - while ((c->count < rdf->numTranslators - 1) && (!c->current)) { - c->count++; - switch (c->queryType) { - case RDF_GET_SLOT_VALUES_QUERY : - c->current = callGetSlotValues(c->count,rdf, c->u, c->s, c->type, - c->inversep, c->tv); - break; - case RDF_ARC_LABELS_OUT_QUERY : - c->current = callArcLabelsOut(c->count, rdf, c->u); - break; - case RDF_ARC_LABELS_IN_QUERY : - c->current = callArcLabelsIn(c->count, rdf, c->u); - break; - } - - } - if (c->current == NULL) return NULL; - return RDF_NextValue(c); -} - - - -void -disposeResourceInt (RDF rdf, RDF_Resource u) -{ - int32 size = rdf->numTranslators; - int32 n = 0; - PRBool ok = 1; - while (n < size && ok) { - ok = (callDisposeResource(n, rdf, u)); - n++; - } - if (ok && (!lockedp(u))) possiblyGCResource(u); -} - - - -PR_PUBLIC_API(RDF_Error) -RDF_ReleaseResource (RDF db, RDF_Resource u) -{ - if (db && u) { - - u->rdf = deleteFromRDFList(u->rdf, db); - if (u->rdf == NULL) disposeResourceInt(db, u); - } - return 0; -} - - - -PR_PUBLIC_API(RDF_Error) -RDF_DisposeCursor (RDF_Cursor c) -{ - if ((c != NULL) && (c->queryType == RDF_FIND_QUERY) && (c->pdata)) freeMem(c->pdata); - if (c != NULL) freeMem(c); - return 0; -} - - - -PRIntn -findEnumerator (PLHashEntry *he, PRIntn i, void *arg) -{ - RDF_Cursor c = (RDF_Cursor) arg; - RDF_Resource u = (RDF_Resource)he->value; - if (itemMatchesFind(c->rdf, u, c->s, c->value, c->match, c->type)) { - /* if (c->size <= c->count) */ { - RDF_Resource* newBlock = getMem(c->size + sizeof(RDF_Resource *)); - if (newBlock == NULL) return HT_ENUMERATE_STOP; - if (c->size > 0) { - memcpy(newBlock, c->pdata, c->size); - freeMem(c->pdata); - } - c->pdata = newBlock; - c->size += sizeof(RDF_Resource *); - } - *((RDF_Resource*)(((char *)c->pdata) + (c->count*sizeof(RDF_Resource *)))) = u; - c->count++; - } - return HT_ENUMERATE_NEXT; -} - - - -PR_PUBLIC_API(RDF_Cursor) -RDF_Find (RDF_Resource s, RDF_Resource match, void* v, RDF_ValueType type) -{ - RDF_Cursor c = (RDF_Cursor) getMem(sizeof(struct RDF_CursorStruct)); - c->s = s; - c->match = match; - c->value = v; - c->type = type; - c->queryType = RDF_FIND_QUERY; - c->rdf = gAllDBs->rdf; - PL_HashTableEnumerateEntries(resourceHash, findEnumerator, c); - c->count = 0; - return c; -} - - - -PRBool -matchStrings(RDF_Resource match, char *data, char *pattern) -{ - PRBool ok = 0; - - if (match == NULL) match = gCoreVocab->RDF_substring; - - if (match == gCoreVocab->RDF_substring) - { - ok = substring(pattern, data); - } - else if (match == gCoreVocab->RDF_stringEquals) - { - ok = (PRBool)(strcmp(data, pattern) == 0); - } - else if (match == gCoreVocab->RDF_stringNotEquals) - { - ok = (PRBool)compareStrings(data, pattern); - } - else if (match == gCoreVocab->RDF_stringStartsWith) - { - ok = startsWith(pattern, data); - } - else if (match == gCoreVocab->RDF_stringEndsWith) - { - ok = endsWith(pattern, data); - } - return(ok); -} - - - -PRBool -itemMatchesFind (RDF r, RDF_Resource u, RDF_Resource s, void* v, - RDF_Resource match, RDF_ValueType type) -{ - RDF_Cursor c; - void *val; - PRBool ok = 0; - - if ((s == gWebData->RDF_URL) && (type == RDF_STRING_TYPE)) - { - val = resourceID(u); - ok = matchStrings(match, val, v); - return(ok); - } - - c = RDF_GetTargets(r, u, s, type, 1); - if (c != NULL) { - while ((val = RDF_NextValue(c)) != NULL) { - if (type == RDF_RESOURCE_TYPE) { - ok = (u == v); - } else if (type == RDF_STRING_TYPE) { - if (s == gWebData->RDF_URL) - { - val = resourceID(u); - } - ok = matchStrings(match, val, v); - } - if (ok) { - RDF_DisposeCursor(c); - return 1; - } - } - RDF_DisposeCursor(c); - } - return 0; -} - - - -RDF_Resource -nextFindValue (RDF_Cursor c) -{ - RDF_Resource ans = NULL; - - if (((c->count*sizeof(RDF_Resource *)) < c->size) && - (*(RDF_Resource *)((char *)c->pdata + (c->count*sizeof(RDF_Resource *))) != NULL)) - { - ans = *(RDF_Resource *)((char *)c->pdata + (c->count*sizeof(RDF_Resource *))); - c->count++; - } - return ans; -} - - - -void -possiblyGCResource (RDF_Resource u) -{ - if ((nullp(u->pdata)) && (nullp(u->rarg1)) && (nullp(u->rarg2))) { - PL_HashTableRemove(resourceHash, resourceID(u)); - freeMem(u->url); - freeMem(u); - } -} - - - -PR_PUBLIC_API(RDF_Notification) -RDF_AddNotifiable (RDF rdfDB, RDF_NotificationProc callBack, - RDF_Event ev, void* pdata) -{ - RDF_Notification ns = (RDF_Notification)getMem(sizeof(struct RDF_NotificationStruct)); - RDF_Event nev = (RDF_Event)getMem(sizeof(struct RDF_EventStruct)); - memcpy((char*)nev, ev, sizeof(struct RDF_EventStruct)); - ns->theEvent = nev; - ns->notifFunction = callBack; - ns->pdata = pdata; - ns->next = rdfDB->notifs; - rdfDB->notifs = ns; - ns->rdf = rdfDB; - return ns; -} - - - -PR_PUBLIC_API(RDF_Error) -RDF_DeleteNotifiable (RDF_Notification ns) -{ - RDF rdf = ns->rdf; - RDF_Notification pr = rdf->notifs; - RDF_Notification not; - if (pr == ns) { - rdf->notifs = pr->next; - } else { - for (not = rdf->notifs; (not != NULL) ; not = not->next) { - if (ns == not) - { - pr->next = not->next; - break; - } - pr = not; - } - } - freeMem(ns->theEvent); - freeMem(ns); - return 0; -} - - - -void -assertNotify (RDF rdf, RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds) - { - RDF_Event nev = not->theEvent; - RDF_AssertEvent ev = &(not->theEvent->event.assert); - PRBool opTypeFixed = not->theEvent->eventType; - PRBool uFixed = (ev->u != NULL); - PRBool sFixed = (ev->s != NULL); - PRBool vFixed = (ev->v != NULL); - RDF_EventType oldEventType = not->theEvent->eventType; - if ((!opTypeFixed ||(not->theEvent->eventType & RDF_ASSERT_NOTIFY)) && - (!uFixed || (ev->u == u)) && - (!vFixed || (ev->v == v)) && - (!sFixed || (ev->s == s))) { - /* if (callHasAssertions(0, rdf, u, s, v, type, !tv)) return; */ - nev->eventType = RDF_ASSERT_NOTIFY; - ev->u = u; - ev->s = s; - ev->v = v; - ev->type = type; - ev->tv = tv; - ev->dataSource = ds; - (*(not->notifFunction))(nev, not->pdata); - nev->eventType = oldEventType; - if (!uFixed) ev->u = NULL; - if (!sFixed) ev->s = NULL; - if (!vFixed) ev->v = NULL; - } -} - - - -void -insertNotify (RDF rdf, RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds) -{ - RDF_Event nev = not->theEvent; - RDF_AssertEvent ev = &(not->theEvent->event.assert); - PRBool opTypeFixed = not->theEvent->eventType; - PRBool uFixed = (ev->u != NULL); - PRBool sFixed = (ev->s != NULL); - PRBool vFixed = (ev->v != NULL); - RDF_EventType oldEventType = not->theEvent->eventType; - if ((!opTypeFixed ||(not->theEvent->eventType & RDF_INSERT_NOTIFY)) && - (!uFixed || (ev->u == u)) && - (!vFixed || (ev->v == v)) && - (!sFixed || (ev->s == s))) { - /* if (callHasAssertions(0, rdf, u, s, v, type, !tv)) return; */ - nev->eventType = RDF_INSERT_NOTIFY; - ev->u = u; - ev->s = s; - ev->v = v; - ev->type = type; - ev->tv = tv; - ev->dataSource = ds; - (*(not->notifFunction))(nev, not->pdata); - nev->eventType = oldEventType; - if (!uFixed) ev->u = NULL; - if (!sFixed) ev->s = NULL; - if (!vFixed) ev->v = NULL; - } -} - - - -void -unassertNotify (RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, char* ds) -{ - RDF_Event nev = not->theEvent; - RDF_UnassertEvent ev = &(not->theEvent->event.unassert); - PRBool opTypeFixed = not->theEvent->eventType; - PRBool uFixed = (ev->u != NULL); - PRBool sFixed = (ev->s != NULL); - PRBool vFixed = (ev->v != NULL); - RDF_EventType oldEventType = not->theEvent->eventType; - if ((!opTypeFixed ||(not->theEvent->eventType & RDF_DELETE_NOTIFY)) && - (!uFixed || (ev->u == u)) && - (!vFixed || (ev->v == v)) && - (!sFixed || (ev->s == s))) { - nev->eventType = RDF_DELETE_NOTIFY; - ev->u = u; - ev->s = s; - ev->v = v; - ev->type = type; - ev->dataSource = ds; - (*(not->notifFunction))(nev, not->pdata); - nev->eventType = oldEventType; - if (!uFixed) ev->u = NULL; - if (!sFixed) ev->s = NULL; - if (!vFixed) ev->v = NULL; - } -} - - - -void -sendNotifications2 (RDFT r, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) -{ - RDFL rl = r->rdf; - - if ((opType == RDF_ASSERT_NOTIFY) && gLocalStore && - (remoteStoreHasAssertion(gLocalStore, u, s, v, type, !tv))) { - return; - } - - while (rl) { - sendNotifications(rl->rdf, opType, u, s, v, type, tv, r->url); - rl = rl->next; - } -} - - - -void -sendNotifications (RDF rdf, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds) -{ - RDF_Notification not; - if (rdf == NULL) return; - for (not = rdf->notifs; (not != NULL) ; not = not->next) { - if (!not->theEvent || (not->theEvent->eventType & opType)) { - RDF_EventType otype = not->theEvent->eventType; - switch (opType) - { - case RDF_ASSERT_NOTIFY : - assertNotify(rdf, not, u, s, v, type, tv, ds); - break; - case RDF_INSERT_NOTIFY : - insertNotify(rdf, not, u, s, v, type, tv, ds); - break; - case RDF_DELETE_NOTIFY : - unassertNotify(not, u, s, v, type, ds); - break; - case RDF_KILL_NOTIFY : - break; - /* killNotify(not, u); */ - } - not->theEvent->eventType = otype; - } - } -} diff --git a/mozilla/rdf/src/core.h b/mozilla/rdf/src/core.h deleted file mode 100644 index dc63d225e0e..00000000000 --- a/mozilla/rdf/src/core.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef _RDF_MCF_H_ -#define _RDF_MCF_H_ - - -#include "rdf-int.h" -#include "prprf.h" -#include "prtime.h" -#include -#include "bmk2rdf.h" - -/* mcf.c data structures and defines */ - -struct RDF_NotificationStruct { - RDF_Event theEvent; - void* pdata; - RDF_NotificationProc notifFunction; - RDF rdf; - struct RDF_NotificationStruct* next; -}; - - -#define ntr(r, n) (*((RDFT*)r->translators + n)) -#define ntrn(r, n) (*((RDFT*)r->translators + n) == NULL) -#define callAssert(n, r, u, s, v,type,tv) (ntrn(r, n) || (ntr(r, n)->assert == NULL) ? 0 : (*(ntr(r, n)->assert))(ntr(r, n), u, s, v, type, tv)) -#define callUnassert(n, r, u, s, v,type) (ntrn(r, n) || (ntr(r, n)->unassert == NULL) ? 0 : (*(ntr(r, n)->unassert))(ntr(r, n), u, s, v, type)) -#define callGetSlotValue(n, r, u, s, type, invp, tv) (ntrn(r, n) || (ntr(r, n)->getSlotValue == NULL) ? 0 : (*(ntr(r, n)->getSlotValue))(ntr(r, n), u, s, type, invp, tv)) -#define callGetSlotValues(n, r, u, s, type,invp, tv) (ntrn(r, n) || (ntr(r, n)->getSlotValues == NULL) ? 0 : (*(ntr(r, n)->getSlotValues))(ntr(r, n), u, s, type,invp, tv)) -#define callHasAssertions(n, r, u, s, v,type,tv) (ntrn(r, n) || (ntr(r, n)->hasAssertion == NULL) ? 0 : (*(ntr(r, n)->hasAssertion))(ntr(r, n), u, s, v, type, tv)) -#define callArcLabelsOut(n, r, u) (ntrn(r, n) || (ntr(r, n)->arcLabelsOut == NULL) ? 0 : (*(ntr(r, n)->arcLabelsOut))(ntr(r, n), u)) -#define callArcLabelsIn(n, r, u) (ntrn(r, n) || (ntr(r, n)->arcLabelsIn == NULL) ? 0 : (*(ntr(r, n)->arcLabelsIn))(ntr(r, n), u)) -#define callDisposeResource(n, r, u) (ntrn(r, n) || (ntr(r, n)->disposeResource == NULL) ? 1 : (*(ntr(r, n)->disposeResource))(ntr(r, n), u)) -#define callExitRoutine(n, r) (ntrn(r, n) || (ntr(r, n)->destroy == NULL) ? 0 : (*(ntr(r, n)->destroy))(ntr(r, n))) -#define callUpdateRoutine(n, r, u) (ntrn(r, n) || (ntr(r, n)->update == NULL) ? 0 : (*(ntr(r, n)->update))(ntr(r, n), u)) - -#define ID_BUF_SIZE 20 - - - -/* mcf.c function prototypes */ - - - -RDFT getTranslator (char* url); -RDFL deleteFromRDFList (RDFL xrl, RDF db); -RDF_Error exitRDF (RDF rdf); -RDF_Resource addDep (RDF db, RDF_Resource u); -PRBool rdfassert(RDF rdf, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type, PRBool tv); -PRBool containerIDp(char* id); -char * makeNewID (); -PRBool iscontainerp (RDF_Resource u); -RDF_BT resourceTypeFromID (char* id); -RDF_Resource specialUrlResource (char* id); -RDF_Resource NewRDFResource (char* id); -RDF_Resource QuickGetResource (char* id); -RDF_Cursor getSlotValues (RDF rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv); -void disposeResourceInt (RDF rdf, RDF_Resource u); -void possiblyGCResource (RDF_Resource u); -RDF_Resource NewRDFResource (char* id); -RDF_Resource QuickGetResource (char* id); -void assertNotify (RDF rdf, RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds); -void insertNotify (RDF rdf, RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds); -void unassertNotify (RDF_Notification not, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, char* ds); -void sendNotifications1 (RDFL rl, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv); -void sendNotifications (RDF rdf, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds); -RDF_Resource nextFindValue (RDF_Cursor c); -PRBool matchStrings(RDF_Resource match, char *str1, char *str2); -PRBool itemMatchesFind (RDF r, RDF_Resource u, RDF_Resource s, void* v, RDF_Resource match, RDF_ValueType type); -PR_PUBLIC_API(RDF_Cursor)RDF_Find (RDF_Resource s, RDF_Resource match, void* v, RDF_ValueType type); -PRIntn findEnumerator (PLHashEntry *he, PRIntn i, void *arg); -void disposeAllDBs (); - - - - -#endif diff --git a/mozilla/rdf/src/glue.h b/mozilla/rdf/src/glue.h deleted file mode 100644 index 889c16750aa..00000000000 --- a/mozilla/rdf/src/glue.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef _RDF_GLUE_H_ -#define _RDF_GLUE_H_ - - -#include "xp.h" -#include "xp_mem.h" -#include "net.h" -#include "ntypes.h" -#include "fe_proto.h" - -#include "prinit.h" - -#ifdef XP_UNIX -#include -#elif defined(XP_MAC) -#include -#endif - -#include "rdf.h" -#include "rdf-int.h" -#include "ht.h" - - - -#define APPLICATION_RDF "application/x-rdf" /* XXX what should these be? */ -#define EXTENSION_RDF ".rdf" -#define EXTENSION_MCF ".mcf" - - - -/* external globals */ -extern char* gLocalStoreURL; -extern char* gBookmarkURL; - - - -/* glue.c prototypes */ - -NSPR_BEGIN_EXTERN_C - -void ht_fprintf(PRFileDesc *file, const char *fmt, ...); - -unsigned int rdf_write_ready(NET_StreamClass *stream); -void rdf_complete(NET_StreamClass *stream); -void rdf_abort(NET_StreamClass *stream, int status); -NET_StreamClass * rdf_Converter(FO_Present_Types format_out, - void *client_data, URL_Struct *urls, MWContext *cx); -void rdf_GetUrlExitFunc (URL_Struct *urls, int status, MWContext *cx); -int rdfRetrievalType (RDFFile f); -int rdf_GetURL (MWContext *cx, int method, - Net_GetUrlExitFunc *exit_routine, RDFFile rdfFile); -void possiblyRereadRDFFiles (void* data); -void RDFglueInitialize (void); -void RDFglueExit (void); -void *gRDFMWContext(RDFT db); -void beginReadingRDFFile (RDFFile file); -void readLocalFile (RDFFile file); - -char *unescapeURL(char *inURL); -char *convertFileURLToNSPRCopaceticPath(char* inURL); -PRFileDesc *CallPROpenUsingFileURL(char *fileURL, PRIntn flags, PRIntn mode); -PRDir *CallPROpenDirUsingFileURL(char *fileURL); -int32 CallPRWriteAccessFileUsingFileURL(char *fileURL); -int32 CallPRDeleteFileUsingFileURL(char *fileURL); -int CallPR_RmDirUsingFileURL(char *dirURL); -int32 CallPRMkDirUsingFileURL(char *dirURL, int mode); -DB *CallDBOpenUsingFileURL(char *fileURL, int flags,int mode, - DBTYPE type, const void *openinfo); - -NSPR_END_EXTERN_C - -#endif diff --git a/mozilla/rdf/src/ht.c b/mozilla/rdf/src/ht.c deleted file mode 100644 index 275141edc66..00000000000 --- a/mozilla/rdf/src/ht.c +++ /dev/null @@ -1,10392 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file implements the Hypertree model on top of the RDF graph model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#define HT_RAPTOR 1 - -#ifndef HT_RAPTOR -#include "fs2rdf.h" -#include "glue.h" -#include "hist2rdf.h" -#include "mcf.h" -#include "scook.h" -#include "utils.h" -#include "rdf.h" -#include "rdfparse.h" -#include "remstore.h" -#include "ht.h" -/* BEGIN NEW_STRING_LIB*/ -#ifdef XP_MAC -#include "allxpstr.h" -#endif -/* END NEW_STRING_LIB*/ - -#else -#include "ht.h" -#include -#endif - - - /* globals */ -HT_Icon urlList = NULL; -HT_PaneStruct *gHTTop = NULL; -HT_Pane gAutoOpenPane = NULL; -RDF gNCDB = NULL; -PRBool gInited = PR_FALSE, gHTEventsEnabled = PR_TRUE; -PRBool gBatchUpdate = PR_FALSE, gAutoEditNewNode = PR_FALSE, gPaneDeletionMode = PR_FALSE; -PRBool gMissionControlEnabled = PR_FALSE; -char *gAutoOpenTo = NULL; -HT_MenuCommand menuCommandsList = NULL; -void *htTimerID = NULL; -_htmlElementPtr htmlElementList = NULL; -static int32 htCounter = 0; -static RDF_Resource pollingResource = NULL; - -HT_Pane gNavigationTemplate = NULL; -HT_Pane gChromeTemplate = NULL; -HT_Pane gManagementTemplate = NULL; - -char * gNavCenterDataSources1[15] = { - "rdf:localStore", "rdf:remoteStore", "rdf:bookmarks", "rdf:remoteStore", "rdf:history", - /* "rdf:ldap", */ "rdf:esftp", /* "rdf:mail", */ -#ifdef XP_MAC - "rdf:appletalk", -#endif - "rdf:lfs", "rdf:ht", - "rdf:columns", "rdf:find", NULL - }; - - -HT_MenuCmd -menus[] = { - HT_CMD_OPEN_NEW_WIN, HT_CMD_OPEN_COMPOSER, HT_CMD_SEPARATOR, HT_CMD_OPEN, - HT_CMD_OPEN_AS_WORKSPACE, HT_CMD_OPEN_FILE, HT_CMD_PRINT_FILE, HT_CMD_REVEAL_FILEFOLDER, -#ifdef SMART_MAIL - HT_CMD_GET_NEW_MAIL, -#endif - HT_CMD_SEPARATOR, HT_CMD_NEW_BOOKMARK, HT_CMD_NEW_FOLDER, HT_CMD_NEW_SEPARATOR, - HT_CMD_MAKE_ALIAS, HT_CMD_ADD_TO_BOOKMARKS, HT_CMD_SAVE_AS, HT_CMD_CREATE_SHORTCUT, - HT_CMD_EXPORT, HT_CMD_EXPORTALL, HT_CMD_RENAME, -#ifdef HT_PASSWORD_RTNS - HT_CMD_SET_PASSWORD, HT_CMD_REMOVE_PASSWORD, -#endif - HT_CMD_SEPARATOR, HT_CMD_SET_TOOLBAR_FOLDER, HT_CMD_SET_BOOKMARK_MENU, HT_CMD_REMOVE_BOOKMARK_MENU, - HT_CMD_SET_BOOKMARK_FOLDER, HT_CMD_REMOVE_BOOKMARK_FOLDER, HT_CMD_SEPARATOR, HT_CMD_CUT, - HT_CMD_COPY, HT_CMD_PASTE, HT_CMD_UNDO, HT_CMD_DELETE_FILE, HT_CMD_DELETE_FOLDER, - HT_CMD_SEPARATOR, HT_CMD_REFRESH, HT_CMD_FIND, HT_CMD_PROPERTIES, HT_CMD_SEPARATOR, - HT_CMD_NEW_WORKSPACE, HT_CMD_RENAME_WORKSPACE, HT_CMD_DELETE_WORKSPACE, HT_CMD_MOVE_WORKSPACE_UP, - HT_CMD_MOVE_WORKSPACE_DOWN, HT_CMD_SEPARATOR, - /* commands from the graph appear at the end */ - (HT_MenuCmd)(-1), -}; - - - /* extern declarations */ -extern RDFT gRemoteStore; -extern char *gRLForbiddenDomains; - -void FE_Print(const char *pUrl); /* XXX this should be added to fe_proto.h */ - - - -void -HT_Startup() -{ - if (gInited == PR_FALSE) - { - gInited = PR_TRUE; - -#ifndef HT_RAPTOR - gMissionControlEnabled = PR_FALSE; - PREF_GetBoolPref(MISSION_CONTROL_RDF_PREF, &gMissionControlEnabled); -#endif - - /* Initialize the HT templates. */ - gChromeTemplate = newTemplatePane("NC:ChromeDefaults"); - gNavigationTemplate = newTemplatePane("NC:NavigationDefaults"); - gManagementTemplate = newTemplatePane("NC:ManagementDefaults"); - -#ifndef HT_RAPTOR - /* HT timer every 12 seconds */ - htTimerID = FE_SetTimeout(htTimerRoutine, NULL, 1000 * 12); -#endif - } -} - - - -void -HT_Shutdown() -{ - /* Free templates */ - if (gNavigationTemplate) - HT_DeletePane(gNavigationTemplate); - - if (gChromeTemplate) - HT_DeletePane(gChromeTemplate); - - if (gManagementTemplate) - HT_DeletePane(gManagementTemplate); - - freeMenuCommandList(); - gInited = PR_FALSE; - gMissionControlEnabled = PR_FALSE; - -#ifndef HT_RAPTOR - if (htTimerID != NULL) - { - FE_ClearTimeout(htTimerID); - htTimerID = NULL; - } -#endif -} - - - -void -htLoadComplete(char *url, int status) -{ - RDF_Resource pollR; - - if (url != NULL) - { - if ((pollR = RDF_GetResource(gNCDB, url, PR_TRUE)) != NULL) - { - if (pollR == pollingResource) - { - pollingResource = NULL; - } - } - } -} - - - -void -htTimerRoutine(void *timerData) -{ - PRBool foundFlag = PR_FALSE; - HT_Pane pane; - HT_View view; - RDF_Cursor c; - RDF_Resource r, pollR; - char *pollURL, *pollInterval; - uint32 now, pollTime, lastPoll; - PRTime prNow, oneMillion, temp; - - htTimerID = NULL; - - pane = gHTTop; - while ((foundFlag == PR_FALSE) && (pane != NULL)) - { - if (pane->special == PR_FALSE) - { - if ((view = HT_GetSelectedView(pane)) != NULL) - { - if (view->refreshingItemListp == PR_FALSE) - { - foundFlag = possiblyUpdateView(view); - } - } - } - pane = pane->next; - } - - if (pollingResource == NULL) - { - if ((c = RDF_Find(gNavCenter->RDF_PollURL, gCoreVocab->RDF_stringNotEquals, - "", RDF_STRING_TYPE)) != NULL) - { - prNow = PR_Now(); - LL_I2L(oneMillion, PR_USEC_PER_SEC); - LL_DIV(temp, prNow, oneMillion); - LL_L2I(now, temp); - while ((r = RDF_NextValue(c)) != NULL) - { - pollURL = RDF_GetSlotValue(gNCDB, r, gNavCenter->RDF_PollURL, - RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - pollInterval = RDF_GetSlotValue(gNCDB, r, gNavCenter->RDF_PollInterval, - RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - if ((pollURL != NULL) && (pollInterval != NULL)) - { - pollTime = (time_t)atol(pollInterval); - if ((pollR = RDF_GetResource(gNCDB, pollURL, PR_TRUE)) != NULL) - { - lastPoll = (time_t)RDF_GetSlotValue(gNCDB, pollR, - gNavCenter->RDF_PollInterval, RDF_INT_TYPE, - PR_FALSE, PR_TRUE); - if ((pollTime > 0L) && ((lastPoll == 0L) || - ((now - lastPoll) > pollTime))) - { - remoteStoreRemove(gRemoteStore, pollR, - gNavCenter->RDF_PollInterval, - (void *)lastPoll, RDF_INT_TYPE); - remoteStoreAdd(gRemoteStore, pollR, - gNavCenter->RDF_PollInterval, - (void *)now, RDF_INT_TYPE, PR_TRUE); - - if (readRDFFile(resourceID(pollR), pollR, 0, gRemoteStore) != NULL) - { - pollingResource = pollR; - break; - } - } - } - } - if (pollURL != NULL) freeMem(pollURL); - if (pollInterval != NULL) freeMem(pollInterval); - } - RDF_DisposeCursor(c); - } - } - -#ifndef HT_RAPTOR - /* if found/updated something, try again a bit (half second later), - otherwise try again in 12 seconds */ - htTimerID = FE_SetTimeout(htTimerRoutine, NULL, ((foundFlag == PR_TRUE) ? (500) : (1000 * 12))); -#endif -} - - - -PRBool -possiblyUpdateView(HT_View view) -{ - HT_Resource node; - PRBool foundFlag = PR_FALSE; - uint32 theIndex; - - XP_ASSERT(view != NULL); - if (view == NULL) return(foundFlag); - - /* walk the list backwards */ - - theIndex = HT_GetItemListCount(view); - while ((foundFlag == PR_FALSE) && (theIndex > 0)) - { - --theIndex; - if ((node = HT_GetNthItem (view, theIndex)) != NULL) - { - if (HT_IsContainer(node) && HT_IsContainerOpen(node)) - { - /* update "file", "find", and "at" containers */ - if (startsWith("file://", resourceID(node->node)) || - startsWith("find:", resourceID(node->node)) || - startsWith("at:", resourceID(node->node))) - { - updateViewItem(node); - } - } - } - } - return(foundFlag); -} - - - -void -updateViewItem(HT_Resource node) -{ - HT_Resource child, nextChild; - RDF_Cursor c; - RDF_Resource r; - PRBool foundFlag; - - XP_ASSERT(node != NULL); - if (node == NULL) return; - - /* mark children as dirty and inited */ - child = node->child; - while (child != NULL) - { - child->flags |= (HT_DIRTY_FLAG | HT_INITED_FLAG); - child = child->next; - } - - gHTEventsEnabled = PR_FALSE; - - /* poll contents, determine difference */ - if ((c = RDF_GetSources(node->view->pane->db, node->node, - gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, PR_TRUE)) != NULL) - { - while ((r = RDF_NextValue(c)) != NULL) - { - foundFlag = PR_FALSE; - child = node->child; - while (child != NULL) - { - if (child->node == r) - { - /* flush cached copy of RDF_lastModifiedDate - as it may have changed */ - resynchItem (node, gWebData->RDF_lastModifiedDate, - NULL, PR_TRUE); - - /* XXX should we check lastModDate, and if it is - different, flush all data off of node ??? */ - child->flags |= HT_INITED_FLAG; - child->flags &= (~HT_DIRTY_FLAG); - foundFlag = PR_TRUE; - break; - } - child = child->next; - } - if (foundFlag == PR_FALSE) - { - /* add new item */ - if ((child = addContainerItem (node, r)) != NULL) - { - child->flags &= (~HT_INITED_FLAG); - child->flags |= HT_DIRTY_FLAG; - } - } - } - RDF_DisposeCursor(c); - } - - foundFlag = PR_FALSE; - - /* first: delete any dirty nodes */ - gBatchUpdate = PR_TRUE; - child = node->child; - while (child != NULL) - { - nextChild = child->next; - if ((child->flags & HT_INITED_FLAG) && (child->flags & HT_DIRTY_FLAG)) - { - deleteContainerItem (node, child->node); - foundFlag = PR_TRUE; - } - child = nextChild; - } - gBatchUpdate = PR_FALSE; - - /* second: update item list */ - refreshItemList(node, 0); - - /* third: send notification of any new nodes */ - child = node->child; - while (child != NULL) - { - /* Note: don't check HT_INITED_FLAG as the previous call to - refreshItemList() will have inited all nodes it saw */ - if (child->flags & HT_DIRTY_FLAG) - { - /* new node, add */ - child->flags &= (~HT_DIRTY_FLAG); - sendNotification(child, HT_EVENT_NODE_ADDED, - NULL, HT_COLUMN_UNKNOWN); - foundFlag = PR_TRUE; - } - child = child->next; - } - - gHTEventsEnabled = PR_TRUE; - - if (foundFlag == PR_TRUE) - { - sendNotification(node->view->top, HT_EVENT_VIEW_REFRESH, - NULL, HT_COLUMN_UNKNOWN); - } -} - - - -PR_PUBLIC_API(PRBool) -HT_IsLocalData (HT_Resource node) -{ - PRBool isLocal = PR_TRUE; - char *origin; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if ((origin = node->dataSource) != NULL) - { - if ((!startsWith("rdf:lfs", origin)) && - (!startsWith("rdf:localStore", origin))) - { - isLocal = PR_FALSE; - } - } - } - return (isLocal); -} - - - -PR_PUBLIC_API(char *) -HT_DataSource (HT_Resource node) -{ - char *dataSource = NULL; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - dataSource = node->dataSource; - } - return(dataSource); -} - - - -HT_Resource -newHTEntry (HT_View view, RDF_Resource node) -{ - HT_Resource existing, nr; - - XP_ASSERT(view != NULL); - XP_ASSERT(node != NULL); - - if ((nr = (HT_Resource)getMem(sizeof(HT_ResourceStruct))) != NULL) - { - existing = PL_HashTableLookup(view->pane->hash, node); - nr->view = view; - if (existing != NULL) - { - nr->nextItem = existing->nextItem; - existing->nextItem = nr; - } - else - { - PL_HashTableAdd(view->pane->hash, node, nr); - } - nr->node = node; - if (containerp(node)) - { - nr->flags |= HT_CONTAINER_FLAG; - } - else - { - nr->flags &= (~HT_CONTAINER_FLAG); - } - nr->flags |= HT_ENABLED_FLAG; - } - return(nr); -} - - - -void -addWorkspace(HT_Pane pane, RDF_Resource r, void *feData) -{ - HT_View view; - - XP_ASSERT(pane != NULL); - XP_ASSERT(r != NULL); - - /* if view has been deleted (PR_FALSE assertion), don't reassert it */ - - if (!RDF_HasAssertion(gNCDB, r, gCoreVocab->RDF_parent, gNavCenter->RDF_Top, RDF_RESOURCE_TYPE, 0)) - { - view = HT_NewView(r, pane, PR_TRUE, feData, PR_FALSE); - } -} - - - -void -deleteWorkspace(HT_Pane pane, RDF_Resource r) -{ - HT_Pane paneList; - HT_Resource parent; - HT_View view, nextView; - - XP_ASSERT(pane != NULL); - XP_ASSERT(r != NULL); - - /* find appropriate view(s) and delete them */ - - paneList = gHTTop; - while (paneList != NULL) - { - view = paneList->viewList; - while (view != NULL) - { - nextView = view->next; - if ((parent = HT_TopNode(view)) != NULL) - { - if (parent->node == r) - { - HT_DeleteView(view); - } - } - view = nextView; - } - paneList = paneList->next; - } -} - - - -/* - HyperTree pane notification function -*/ - -void -htrdfNotifFunc (RDF_Event ns, void* pdata) -{ - HT_Event theEvent; - HT_Pane pane; - HT_Resource htr; - PRHashTable *hash; - RDF_AssertEvent aev; - RDF_UnassertEvent uev; - RDF_Resource vu; - - pane = (HT_Pane)pdata; - XP_ASSERT(pane != NULL); - hash = pane->hash; - XP_ASSERT(hash != NULL); - - switch (ns->eventType) - { - case RDF_INSERT_NOTIFY: - case RDF_ASSERT_NOTIFY: - aev = &(ns->event.assert); - if (aev->s == gCoreVocab->RDF_parent) - { - vu = (RDF_Resource)aev->v; - if (vu == gNavCenter->RDF_Toolbar && pane->toolbar) - { - if (aev->tv) - { - addWorkspace(pane, aev->u, NULL); - } - else - { - deleteWorkspace(pane, aev->u); - } - } - else if (vu == gNavCenter->RDF_Top && !pane->toolbar) - { - if (aev->tv) - { - addWorkspace(pane, aev->u, NULL); - } - else - { - deleteWorkspace(pane, aev->u); - } - } - else - { - htr = PR_HashTableLookup(hash, vu); - while (htr != NULL) - { - if ((htr->child != NULL) || (HT_IsContainerOpen(htr))) - { - if (aev->tv) - { - if (ns->eventType == RDF_INSERT_NOTIFY) - { - resynchContainer(htr); - } - else - { - addContainerItem(htr, aev->u); - } - } - else - { - deleteContainerItem(htr, aev->u); - } - } - htr = htr->nextItem; - } - } - } - else if (aev->s != gCoreVocab->RDF_instanceOf) - { - if (aev->s == gNavCenter->RDF_HTMLURL) - { - theEvent = HT_EVENT_VIEW_HTML_ADD; - } - else - { - theEvent = HT_EVENT_NODE_VPROP_CHANGED; - } - htr = PR_HashTableLookup(hash, aev->u); - while (htr != NULL) - { - resynchItem(htr, aev->s, aev->v, aev->tv); - sendNotification(htr, theEvent, aev->s, - (aev->type == RDF_STRING_TYPE) ? - HT_COLUMN_STRING : HT_COLUMN_UNKNOWN); - htr = htr->nextItem; - } - } - break; - - case RDF_DELETE_NOTIFY: - uev = &(ns->event.unassert); - if ((uev->s == gCoreVocab->RDF_parent)) - { - if ((RDF_Resource)uev->v == gNavCenter->RDF_Top) - { - deleteWorkspace(pane, uev->u); - } - else - { - htr = PR_HashTableLookup(hash, (RDF_Resource)uev->v); - while (htr != NULL) - { - if ((uev->s == gCoreVocab->RDF_parent) && (htr->child)) - { - deleteContainerItem(htr, uev->u); - } - htr = htr->nextItem; - } - } - } - else if (uev->s != gCoreVocab->RDF_instanceOf) - { - if (uev->s == gNavCenter->RDF_HTMLURL) - { - theEvent = HT_EVENT_VIEW_HTML_REMOVE; - } - else - { - theEvent = HT_EVENT_NODE_VPROP_CHANGED; - } - htr = PR_HashTableLookup(hash, (RDF_Resource)uev->u); - while (htr != NULL) - { - resynchItem(htr, uev->s, uev->v, PR_FALSE); - sendNotification(htr, theEvent, uev->s, - (uev->type == RDF_STRING_TYPE) ? - HT_COLUMN_STRING : HT_COLUMN_UNKNOWN); - htr = htr->nextItem; - } - } - break; - } -} - - - -/* - Bookmark / Personal Toolbar pane notification function - - Note: only pass RDF_name property changes -*/ - -void -bmkNotifFunc (RDF_Event ns, void* pdata) -{ - HT_Pane pane; - HT_Resource htr; - PLHashTable *hash; - RDF_AssertEvent aev = NULL; - RDF_UnassertEvent uev = NULL; - - pane = (HT_Pane)pdata; - XP_ASSERT(pane != NULL); - hash = pane->hash; - XP_ASSERT(hash != NULL); - - switch (ns->eventType) - { - case RDF_INSERT_NOTIFY : - case RDF_ASSERT_NOTIFY : - aev = &(ns->event.assert); - if (aev->s == gCoreVocab->RDF_parent) - { - htr = PL_HashTableLookup(hash, (RDF_Resource)aev->v); - while (htr != NULL) - { - /* Note: don't check if open... remove item even if closed */ - if (aev->tv) - { - if (ns->eventType == RDF_INSERT_NOTIFY) - { - resynchContainer(htr); - } - else - { - addContainerItem(htr, aev->u); - } - } - else - { - deleteContainerItem(htr, aev->u); - } - htr = htr->nextItem; - } - } - else - { - htr = PL_HashTableLookup(hash, aev->u); - while (htr != NULL) - { - resynchItem(htr, aev->s, aev->v, aev->tv); - sendNotification(htr, HT_EVENT_NODE_VPROP_CHANGED, aev->s, - (aev->type == RDF_STRING_TYPE) ? - HT_COLUMN_STRING : HT_COLUMN_UNKNOWN); - htr = htr->nextItem; - } - } - break; - - case RDF_DELETE_NOTIFY: - uev = &(ns->event.unassert); - if (uev->s == gCoreVocab->RDF_parent) - { - htr = PL_HashTableLookup(hash, (RDF_Resource)uev->v); - while (htr != NULL) - { - if (htr->child) - { - deleteContainerItem(htr, uev->u); - } - htr = htr->nextItem; - } - } - else - { - htr = PL_HashTableLookup(hash, (RDF_Resource)uev->u); - while (htr != NULL) - { - resynchItem(htr, uev->s, uev->v, PR_FALSE); - sendNotification(htr, HT_EVENT_NODE_VPROP_CHANGED, uev->s, - (uev->type == RDF_STRING_TYPE) ? - HT_COLUMN_STRING : HT_COLUMN_UNKNOWN); - htr = htr->nextItem; - } - } - break; - } -} - - - -void -refreshItemListInt (HT_View view, HT_Resource node) -{ - uint32 bucketNum,count,offset; - ldiv_t cdiv; - - if (node != NULL) - { - node->view = view; - } - count = view->itemListCount; - cdiv = ldiv(count , ITEM_LIST_ELEMENT_SIZE); - bucketNum = (uint32)cdiv.quot; - offset = (uint32)cdiv.rem; - if (*(view->itemList + bucketNum) == NULL) - { - *(view->itemList + bucketNum) = (HT_Resource*)getMem(ITEM_LIST_ELEMENT_SIZE*4); - if (*(view->itemList + bucketNum) == NULL) - { - return; - } - } - *((*(view->itemList + bucketNum)) + offset) = node; - node->itemListIndex = (uint32)count; - view->itemListCount++; -} - - - -int -nodeCompareRtn(HT_Resource *node1, HT_Resource *node2) -{ - PRBool sortOnName = PR_TRUE, isSep1, isSep2; - uint32 node1Index, node2Index; - int retVal=0; - void *data1, *data2; - void *sortToken; - uint32 sortTokenType; - PRBool descendingFlag; - char *node1Name = NULL, *node2Name = NULL; - char *id, *pos1 = NULL, *pos2 = NULL; - RDF_Resource pos1Resource, pos2Resource; - time_t date1=0, date2=0; - - XP_ASSERT(node1 != NULL); - XP_ASSERT(node2 != NULL); - - if (((*node1) == NULL) || ((*node2) == NULL)) - { - if (((*node1) == NULL) && ((*node2) != NULL)) return(1); - else if (((*node1) != NULL) && ((*node2) == NULL)) return(-1); - return(0); - } - - sortToken = (*node1)->view->sortToken; - sortTokenType = (*node1)->view->sortTokenType; - descendingFlag = (*node1)->view->descendingFlag; - - if (sortToken != NULL) - { - isSep1 = HT_IsSeparator(*node1); - isSep2 = HT_IsSeparator(*node2); - if (isSep1 && isSep2) return(0); - else if (isSep1) return(1); - else if (isSep2) return(-1); - - HT_GetNodeData (*node1, sortToken, sortTokenType, &data1); - HT_GetNodeData (*node2, sortToken, sortTokenType, &data2); - - if ((sortToken == gNavCenter->RDF_bookmarkAddDate) || - (sortToken == gWebData->RDF_firstVisitDate) || - (sortToken == gWebData->RDF_lastVisitDate) || - (sortToken == gWebData->RDF_creationDate) || - (sortToken == gWebData->RDF_lastModifiedDate)) - { - if ((sortTokenType == HT_COLUMN_STRING) && - (data1 != NULL) && (data2 != NULL)) - { -#ifndef HT_RAPTOR - date1 = (time_t)XP_ParseTimeString((char *)data1, PR_FALSE); - date2 = (time_t)XP_ParseTimeString((char *)data2, PR_FALSE); -#endif - if ((date1 != 0) && (date2 != 0)) - { - data1 = (void *)date1; - data2 = (void *)date2; - sortTokenType = HT_COLUMN_DATE_INT; - } - } - } - - switch(sortTokenType) - { - case HT_COLUMN_STRING: - case HT_COLUMN_DATE_STRING: - sortOnName = PR_FALSE; - if (data1 && data2) - { - retVal = compareStrings(data1, data2); - sortOnName = PR_FALSE; - } - else - { - descendingFlag = PR_FALSE; - if (data1) retVal=-1; - else if (data2) retVal=1; - else - { - descendingFlag = PR_TRUE; - sortOnName = PR_TRUE; - retVal=0; - } - } - break; - - case HT_COLUMN_INT: - case HT_COLUMN_DATE_INT: - if ((long)data1 == (long)data2) - retVal = 0; - else if((long)data1 < (long)data2) - retVal = -1; - else retVal = 1; - sortOnName = PR_FALSE; - break; - } - if (sortOnName == PR_TRUE) - { - node1Name = HT_GetNodeName(*node1); - node2Name = HT_GetNodeName(*node2); - if ((node1Name != NULL) && (node2Name != NULL)) - { - retVal = compareStrings(node1Name, node2Name); - } - else - { - if (node1Name != NULL) retVal=-1; - else if (node2Name != NULL) retVal=1; - else retVal=0; - } - } - if ((descendingFlag == PR_TRUE) && (retVal != 0)) - { - retVal = -retVal; - } - } - else /* natural order */ - { - pos1Resource = pos2Resource = NULL; - if ((id = PR_smprintf("pos(%s)", resourceID((*node1)->parent->node))) != NULL) - { - pos1Resource = RDF_GetResource((*node1)->view->pane->db, id, PR_TRUE); - XP_FREE(id); - } - if ((id = PR_smprintf("pos(%s)", resourceID((*node2)->parent->node))) != NULL) - { - pos2Resource = RDF_GetResource((*node2)->view->pane->db, id, PR_TRUE); - XP_FREE(id); - } - pos1 = pos2 = NULL; - if (pos1Resource != NULL) - { - HT_GetNodeData ((*node1), pos1Resource, HT_COLUMN_STRING, &pos1); - } - if (pos2Resource != NULL) - { - HT_GetNodeData ((*node2), pos2Resource, HT_COLUMN_STRING, &pos2); - } - - if ((pos1 != NULL) && (pos2 == NULL)) retVal=-1; - else if ((pos1 == NULL) && (pos2 != NULL)) retVal=1; - else if ((pos1 !=NULL) && (pos2 != NULL)) - { - if (isdigit(pos1[0]) && isdigit(pos2[0])) - { - node1Index = atol(pos1); - node2Index = atol(pos2); - if (node1Index < node2Index) retVal=-1; - else if (node1Index > node2Index) retVal=1; - else retVal=0; - } - else - { - retVal = compareStrings(pos1, pos2); - } - } - else - { - node1Index = (*node1)->unsortedIndex; - node2Index = (*node2)->unsortedIndex; - if (node1Index < node2Index) retVal=-1; - else if (node1Index > node2Index) retVal=1; - else retVal=0; - } - } - return(retVal); -} - - - -void -sortNodes(HT_View view, HT_Resource parent, HT_Resource *children, uint32 numChildren) -{ - RDF_BT containerType; - PRBool descendingFlag = PR_FALSE, sortChanged = PR_FALSE; - void *sortToken = NULL; - uint32 sortTokenType = 0; - uint32 startIndex, loop; - - XP_ASSERT(view != NULL); - XP_ASSERT(parent != NULL); - -#ifndef HT_RAPTOR - - containerType = resourceType(parent->node); - if ((view->sortToken == NULL) && (containerType != RDF_RT) && 0) - { - /* default: sort on name column */ - - sortChanged = PR_TRUE; - - sortToken = view->sortToken; - view->sortToken = gCoreVocab->RDF_name; - - sortTokenType = view->sortTokenType; - view->sortTokenType = HT_COLUMN_STRING; - - descendingFlag = view->descendingFlag; - view->descendingFlag = PR_FALSE; - } - if (numChildren>1) - { - /* smart sorting (sort within separators) on name column */ - if (view->sortToken == gCoreVocab->RDF_name) - { - startIndex=0; - for (loop=0; loop startIndex+1) - { - XP_QSORT((void *)&children[startIndex], (size_t)(loop-startIndex), - (size_t)sizeof(HT_Resource *), (void *)nodeCompareRtn); - startIndex = loop+1; - } - } - } - if (loop > startIndex+1) - { - XP_QSORT((void *)&children[startIndex], (size_t)(loop-startIndex), - (size_t)sizeof(HT_Resource *), (void *)nodeCompareRtn); - startIndex = loop+1; - } - } - else - { - XP_QSORT((void *)children, (size_t)numChildren, - (size_t)sizeof(HT_Resource *), (void *)nodeCompareRtn); - } - } - if (sortChanged == PR_TRUE) - { - view->sortToken = sortToken; - view->sortTokenType = sortTokenType; - view->descendingFlag = descendingFlag; - } -#endif -} - - - -uint32 -refreshItemList1(HT_View view, HT_Resource node) -{ - HT_Cursor c; - HT_Resource *r; - uint32 loop, numElements=0, numGrandChildren=0; - - XP_ASSERT(view != NULL); - XP_ASSERT(node != NULL); - - if (node == NULL) return(0); - node->view = view; - - if ((c = HT_NewCursor(node)) != NULL) - { - if ((numElements = c->numElements) > 0) - { - if ((node->children = (HT_Resource *)getMem( - (numElements+1) * sizeof (HT_Resource *))) != NULL) - { - loop=0; - while (((node->children[loop]) = HT_GetNextItem(c)) != NULL) - { - ++loop; - if (loop >= numElements) break; - } - numElements = loop; - - sortNodes(view, node, node->children, numElements); - - /* after a sort, update container's child list */ - - r = &(node->child); - for (loop=0; loopchildren[loop]; - r = &((*r)->next); - } - *r = NULL; - - for (loop=0; loopchildren[loop]); - if (HT_IsContainer(node->children[loop])) - { - numGrandChildren += refreshItemList1(view, - node->children[loop]); - } - } - freeMem(node->children); - node->children = NULL; - } - } - HT_DeleteCursor(c); - node->numChildren = numElements; - node->numChildrenTotal = numElements + numGrandChildren; - return(node->numChildrenTotal); - } - else - { - node->child = NULL; - node->numChildren = 0; - node->numChildrenTotal = 0; - return(0); - } -} - - - -void -refreshItemList (HT_Resource node, HT_Event whatHappened) -{ - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - XP_ASSERT(node->view->top != NULL); - - if ((node == NULL) || (node->view == NULL) || (node->view->top == NULL)) - { - return; - } - - if (!node->view->refreshingItemListp) - { - node->view->refreshingItemListp = 1; - node->view->itemListCount = 0; - refreshItemList1(node->view,node->view->top); - node->view->refreshingItemListp = 0; - node->view->inited = PR_TRUE; - if ((gHTEventsEnabled == PR_TRUE) && whatHappened) - { - sendNotification(node, whatHappened, NULL, HT_COLUMN_UNKNOWN); - } - } -} - - - -void -refreshPanes(PRBool onlyUpdateBookmarks, PRBool onlyUpdatePersonalToolbar, RDF_Resource newTopNode) -{ - HT_Pane *paneList; - - paneList = &gHTTop; - while ((*paneList) != NULL) - { - if (((onlyUpdateBookmarks == PR_TRUE) && ((*paneList)->bookmarkmenu == PR_TRUE)) || - ((onlyUpdatePersonalToolbar == PR_TRUE) && ((*paneList)->personaltoolbar == PR_TRUE))) - { - if ((*paneList)->selectedView != NULL) - { - destroyViewInt((*paneList)->selectedView->top, PR_FALSE); - (*paneList)->selectedView->top->node = newTopNode; - (*paneList)->selectedView->top->flags |= HT_OPEN_FLAG; - (*paneList)->dirty = PR_TRUE; - } - } - - if ((*paneList)->dirty == PR_TRUE) - { - if ((*paneList)->selectedView != NULL) - { - refreshItemList (((*paneList)->selectedView)->top, - HT_EVENT_VIEW_REFRESH); - } - (*paneList)->dirty = PR_FALSE; - } - paneList = &(*paneList)->next; - } -} - - - -PR_PUBLIC_API(HT_Resource) -HT_GetContainerItem(HT_Resource parent, uint32 childNum) -{ - HT_Resource child = NULL; - - XP_ASSERT(parent != NULL); - - if (parent != NULL) - { - child = parent->child; - while ((childNum > 0) && (child != NULL)) - { - --childNum; - child = child->next; - } - } - return(child); -} - - - -PR_PUBLIC_API(uint32) -HT_GetCountDirectChildren(HT_Resource node) -{ - uint32 count = 0; - - XP_ASSERT(node != NULL); - - if (HT_IsContainer(node) && HT_IsContainerOpen(node)) - { - count = node->numChildren; - } - return(count); -} - - - -PR_PUBLIC_API(uint32) -HT_GetCountVisibleChildren(HT_Resource node) -{ - uint32 count=0; - - XP_ASSERT(node != NULL); - - if (HT_IsContainer(node) && HT_IsContainerOpen(node)) - { - count = node->numChildrenTotal; - } - return(count); -} - - - -PRBool -initToolbars (HT_Pane pane) -{ - HT_View view; - RDF_Cursor c; - RDF_Resource n; - PRBool err = PR_FALSE; - - XP_ASSERT(pane != NULL); - - if ((c = RDF_GetSources(pane->db, gNavCenter->RDF_Toolbar, gCoreVocab->RDF_parent, - RDF_RESOURCE_TYPE, 1)) != NULL) - { - while ((n = RDF_NextValue(c)) != NULL) - { - if ((view = HT_NewView(n, pane, PR_TRUE, NULL, PR_FALSE)) == NULL) - { - err = PR_TRUE; - break; - } - } - RDF_DisposeCursor(c); - } - return(err); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_NewToolbarPane(HT_Notification notify) -{ - HT_Pane pane; - RDF_Event ev; - PRBool err = PR_FALSE; - RDF_Resource resource; - - resource = gNavCenter->RDF_Toolbar; - do - { - if ((pane = (HT_Pane)getMem(sizeof(HT_PaneStruct))) == NULL) - { - err = PR_TRUE; - break; - } - - pane->toolbar = PR_TRUE; - pane->ns = notify; - pane->mask = HT_EVENT_DEFAULT_NOTIFICATION_MASK ; - if ((ev = (RDF_Event)getMem(sizeof(struct RDF_EventStruct))) == NULL) - { - err = PR_TRUE; - break; - } - - ev->eventType = HT_EVENT_DEFAULT_NOTIFICATION_MASK; - pane->db = HTRDF_GetDB(pane); - pane->rns = RDF_AddNotifiable(pane->db, htrdfNotifFunc, ev, pane); - freeMem(ev); - - if ((pane->hash = PL_NewHashTable(500, idenHash, PL_CompareValues, - PL_CompareValues, NULL, NULL)) == NULL) - { - err = PR_TRUE; - break; - } - - /* pane->autoFlushFlag = PR_TRUE; */ - - pane->next = gHTTop; - gHTTop = pane; - - if ((err = initToolbars(pane)) == PR_TRUE) - { - break; - } - } while (PR_FALSE); - - if (err == PR_TRUE) - { - if (pane != NULL) - { - htDeletePane(pane,PR_FALSE); - pane = NULL; - } - } - return(pane); -} - - - -HT_Pane -paneFromResource(RDF db, RDF_Resource resource, HT_Notification notify, - PRBool autoFlushFlag, PRBool autoOpenFlag, PRBool useColumns) -{ - HT_Pane pane; - HT_View view; - RDF_Event ev; - PRBool err = PR_FALSE; - - do - { - if ((pane = (HT_Pane)getMem(sizeof(HT_PaneStruct))) == NULL) - { - err = PR_TRUE; - break; - } - pane->special = PR_TRUE; - pane->ns = notify; - pane->mask = HT_EVENT_DEFAULT_NOTIFICATION_MASK ; - if ((ev = (RDF_Event)getMem(sizeof(struct RDF_EventStruct))) == NULL) - { - err = PR_TRUE; - break; - } - - if (db == NULL) db = HTRDF_GetDB(pane); - - ev->eventType = HT_EVENT_DEFAULT_NOTIFICATION_MASK; - - pane->rns = RDF_AddNotifiable(db, (autoFlushFlag ? bmkNotifFunc : htrdfNotifFunc), ev, pane); - freeMem(ev); - - if ((pane->hash = PL_NewHashTable(500, idenHash, PL_CompareValues, - PL_CompareValues, NULL, NULL)) == NULL) - { - err = PR_TRUE; - break; - } - pane->db = db; - /* pane->autoFlushFlag = autoFlushFlag; */ - - if ((view = HT_NewView(resource, pane, useColumns, NULL, autoOpenFlag)) == NULL) - { - err = PR_TRUE; - break; - } - pane->selectedView = view; - - pane->next = gHTTop; - gHTTop = pane; - - } while (PR_FALSE); - - if (err == PR_TRUE) - { - if (pane != NULL) - { - htDeletePane(pane,PR_FALSE); - pane = NULL; - } - } - return(pane); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_PaneFromResource(RDF_Resource r, HT_Notification n, PRBool autoFlush, PRBool autoOpen, PRBool useColumns) -{ - return paneFromResource(NULL, r, n, autoFlush, autoOpen, useColumns); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_PaneFromURL(void *pContext, char *url, char* templateType, HT_Notification n, PRBool autoFlush, int32 param_count, - char** param_names, char** param_values) -{ - HT_Pane pane = NULL; - RDF db = NULL; - RDF_Resource r; - char *dbstr[2]; - char* dburl = getBaseURL(url); - int32 pn = 0; - HT_View view; - HT_Column *columnList, column; - char* topUrl = NULL; - char* title = NULL; - - XP_ASSERT(url != NULL); - while (pn < param_count) { - char* param_name = *(param_names + pn) ; - if (!param_name) break; - if (strcmp(param_name, "root") == 0) { - topUrl = *(param_values + pn); - } - if (strcmp(param_name, "title") == 0) { - title = *(param_values + pn); -#ifndef HT_RAPTOR - XP_ASSERT(IsUTF8String(title)); -#endif - } - pn++; - } - - if (!topUrl) topUrl = url; - r = RDF_GetResource(db, topUrl, 1); - - dbstr[0] = dburl; - dbstr[1] = NULL; - if ((db = RDF_GetDB(dbstr)) != NULL) { - db->context = pContext; - if (r != NULL) - { - remoteStoreAdd(db->translators[0], r, gCoreVocab->RDF_name, - copyString(title), RDF_STRING_TYPE, 1); - setContainerp(r, 1); - pane = paneFromResource(db, r, n, autoFlush, 1, 0); - pane->templateType = copyString(templateType); - view = pane->viewList; - } - } - if (!db) return NULL; - columnList = &view->columns; - pn = 0; - while ((db->translators[0]) && (pn < param_count)) { - char* param_name = *(param_names + pn) ; - if (!param_name) break; - if (strcmp(param_name, "Column") == 0) { - char* param_value = *(param_values + pn) ; - RDF_Resource r = RDF_GetResource(db, param_value, 1); - column = (HT_Column)getMem(sizeof(HT_ColumnStruct)); - column->token = r; - column->tokenType = HT_COLUMN_STRING; - *columnList = column; - columnList = &(column->next); - column->name = (strchr(param_value, ':') ? copyString(strchr(param_value, ':')+1) : - copyString(param_value)); - HT_SetColumnVisibility(view, r, HT_COLUMN_STRING, 1); - } - pn++; - } - freeMem(dburl); - return (pane); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_NewQuickFilePane(HT_Notification notify) -{ - HT_Pane pane = NULL; - RDF_Resource qf; - - if ((qf = RDFUtil_GetQuickFileFolder()) != NULL) - { - if ((pane = paneFromResource(newNavCenterDB(), qf, notify, PR_TRUE, PR_TRUE, 0)) != NULL) - { - pane->bookmarkmenu = PR_TRUE; - RDFUtil_SetQuickFileFolder(pane->selectedView->top->node); - } - } - return(pane); -} - - - -HT_Pane -newTemplatePane(char* templateName) -{ - HT_Pane pane = NULL; - RDF_Resource tmpl; - - if ((tmpl = RDF_GetResource(NULL, templateName, PR_TRUE)) != NULL) - pane = paneFromResource(newNavCenterDB(), tmpl, NULL, PR_TRUE, PR_TRUE, 0); - - return(pane); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_NewPersonalToolbarPane(HT_Notification notify) -{ - HT_Pane pane = NULL; - RDF_Resource pt; - - - if ((pt = RDFUtil_GetPTFolder()) != NULL) - { - if ((pane = paneFromResource(newNavCenterDB(), pt, notify, PR_TRUE, PR_TRUE, 0)) != NULL) - { - pane->personaltoolbar = PR_TRUE; - RDFUtil_SetPTFolder(pane->selectedView->top->node); - } - } - return(pane); -} - - - -PR_PUBLIC_API(void) -HT_AddToContainer (HT_Resource container, char *url, char *optionalTitle) -{ - RDF_Resource r; - RDF db; - - XP_ASSERT(container != NULL); - XP_ASSERT(container->view != NULL); - XP_ASSERT(container->view->pane != NULL); - XP_ASSERT(container->view->pane->db != NULL); - XP_ASSERT(url != NULL); -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(optionalTitle)); -#endif - - db = container->view->pane->db; - - if ((r = RDF_GetResource(db, url, 1)) != NULL) - { - if ((optionalTitle != NULL) && (optionalTitle[0] != '\0')) - { - RDF_Assert(db, r, gCoreVocab->RDF_name, - optionalTitle, RDF_STRING_TYPE); - } - htSetBookmarkAddDateToNow(r); - RDF_Assert(db, r, gCoreVocab->RDF_parent, container->node, RDF_RESOURCE_TYPE); - } -} - - - -#ifndef HT_RAPTOR - -PR_PUBLIC_API(void) -HT_LayoutComplete(MWContext *context, TagList *metaTags, char *url) -{ - INTL_CharSetInfo intl_csi; - int16 wincsid; - PA_Block name, content; - PA_Tag *metaList; - RDF_Resource r; - char *temp; - unsigned long matchNum; - -struct { - char *name; - RDF_Resource r; - } matches[9]; - - /* Note: if more elements are added, adjust the size of the array above! */ - - matches[0].name = "description"; matches[0].r = gWebData->RDF_description; - matches[1].name = "keyword"; matches[1].r = gWebData->RDF_keyword; - matches[2].name = "smallIcon"; matches[2].r = gNavCenter->RDF_smallIcon; - matches[3].name = "largeIcon"; matches[3].r = gNavCenter->RDF_largeIcon; - matches[4].name = "toolbarPressedIcon"; matches[4].r = gNavCenter->toolbarPressedIcon; - matches[5].name = "toolbarRolloverIcon"; matches[5].r = gNavCenter->toolbarRolloverIcon; - matches[6].name = "toolbarEnabledIcon"; matches[6].r = gNavCenter->toolbarEnabledIcon; - matches[7].name = "toolbarDisabledIcon"; matches[7].r = gNavCenter->toolbarDisabledIcon; - matches[8].name = NULL; matches[8].r = NULL; - - XP_ASSERT(context != NULL); - if (context == NULL) return; - XP_ASSERT(metaTags != NULL); - if (metaTags == NULL) return; - XP_ASSERT(url != NULL); - if (url == NULL) return; - - intl_csi = LO_GetDocumentCharacterSetInfo(context); - wincsid = INTL_GetCSIWinCSID(intl_csi); - - metaList = metaTags->tagList; - while (metaList != NULL) - { - if (metaList->data != NULL) - { - /* get any META tags for this document - and save them into the graph */ - - name = PA_FetchParamValue(metaList, "name", (uint16)wincsid); - content = PA_FetchParamValue(metaList, "content", (uint16)wincsid); - if ((name != NULL) && (content != NULL)) - { - if ((r = RDF_GetResource(gNCDB, url, PR_TRUE)) != NULL) - { - for (matchNum=0; matches[matchNum].name != NULL; matchNum++) - { - if (!strcmp((char *)name, matches[matchNum].name)) - { - /* if already exists, don't change */ - if ((temp = RDF_GetSlotValue(gNCDB, r, - matches[matchNum].r, RDF_STRING_TYPE, - PR_FALSE, PR_TRUE)) != NULL) - { - freeMem(temp); - } - else - { - RDF_Assert(gNCDB, r, matches[matchNum].r, - (char *)convertString2UTF8(wincsid, (char*)content), RDF_STRING_TYPE); - free(content); - } - } - } - } - } - } - metaList = metaList->next; - } -} -#endif - - - -PR_PUBLIC_API(void) -HT_AddBookmark (char *url, char *optionalTitle) -{ - RDF_Resource nbFolder, r; - - XP_ASSERT(url != NULL); -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(optionalTitle)); -#endif - - if ((nbFolder = RDFUtil_GetNewBookmarkFolder()) != NULL) - { - if ((r = RDF_GetResource(gNCDB, url, 1)) != NULL) - { - if ((optionalTitle != NULL) && (optionalTitle[0] != '\0')) - { - RDF_Assert(gNCDB, r, gCoreVocab->RDF_name, - optionalTitle, RDF_STRING_TYPE); - } - htSetBookmarkAddDateToNow(r); - RDF_Assert(gNCDB, r, gCoreVocab->RDF_parent, nbFolder, RDF_RESOURCE_TYPE); - /* htLookInCacheForMetaTags(url); */ - } - } -} - - - -void -htSetBookmarkAddDateToNow(RDF_Resource r) -{ - char buffer[128], *temp; - struct tm *time; - uint32 now; - - XP_ASSERT(r != NULL); - if (r == NULL) return; - -#ifndef HT_RAPTOR - if ((temp = RDF_GetSlotValue(gNCDB, r, gNavCenter->RDF_bookmarkAddDate, - RDF_STRING_TYPE, PR_FALSE, PR_TRUE)) != NULL) - { - /* already has an add date */ - freeMem(temp); - } - else - { - /* time((time_t *)&now); */ - if ((time = localtime((time_t *) &now)) != NULL) - { -#ifdef XP_MAC - time->tm_year += 4; - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#endif - RDF_Assert(gNCDB, r, gNavCenter->RDF_bookmarkAddDate, - (void *)copyString(buffer), RDF_STRING_TYPE); - } - } -#endif -} - - - -RDF -newHTPaneDB() -{ - return gNCDB; -} - - - -RDF -HTRDF_GetDB(HT_Pane pane) -{ - RDF ans; - char *navCenterURL; - int32 n = 0; - char *dburl, *ndburl; - -#ifndef HT_RAPTOR - PREF_SetDefaultCharPref("browser.NavCenter", "http://rdf.netscape.com/rdf/navcntr.rdf"); - PREF_CopyCharPref("browser.NavCenter", &navCenterURL); -#else - navCenterURL = copyString("http://rdf.netscape.com/rdf/navcntr.rdf"); -#endif - if (!strchr(navCenterURL, ':')) - { - navCenterURL = makeDBURL(navCenterURL); - } - else - { - copyString(navCenterURL); - } - *(gNavCenterDataSources1 + 1) = copyString(navCenterURL); - - while (*(gNavCenterDataSources1 + n)) { - dburl = *(gNavCenterDataSources1 + n); - if (startsWith("rdf:ht", dburl)) { - ndburl = getMem(16); - sprintf(ndburl, "rdf:ht%i", htCounter++); - pane->htdburl = ndburl; - *(gNavCenterDataSources1 + n) = ndburl; - break; - } - n++; - } - - ans = RDF_GetDB(gNavCenterDataSources1); - pane->htdb = RDFTNamed(ans, pane->htdburl); - freeMem(navCenterURL); - return(ans); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_NewPane (HT_Notification notify) -{ - HT_Pane pane; - PRBool err = PR_FALSE; - RDF_Event ev; - - do - { - if ((pane = (HT_Pane)getMem(sizeof(HT_PaneStruct))) == NULL) - { - err = PR_TRUE; - break; - } - pane->ns = notify; - pane->mask = HT_EVENT_DEFAULT_NOTIFICATION_MASK ; - - if ((ev = (RDF_Event)getMem(sizeof(struct RDF_EventStruct))) == NULL) - { - err = PR_TRUE; - break; - } - ev->eventType = HT_EVENT_DEFAULT_NOTIFICATION_MASK; - pane->db = HTRDF_GetDB(pane); - pane->rns = RDF_AddNotifiable(pane->db, htrdfNotifFunc, ev, pane); - freeMem(ev); - - if ((pane->hash = PL_NewHashTable(500, idenHash, PL_CompareValues, - PL_CompareValues, null, null)) == NULL) - { - err = PR_TRUE; - break; - } - - pane->next = gHTTop; - gHTTop = pane; - - if ((err = initViews(pane)) == PR_TRUE) - { - break; - } - -/* - pane->selectedView = pane->viewList; -*/ - } while (PR_FALSE); - - if (err == PR_TRUE) - { - if (pane != NULL) - { - htDeletePane(pane, PR_FALSE); - pane = NULL; - } - } - return(pane); -} - - - -PRBool -initViews (HT_Pane pane) -{ - HT_View view; - RDF_Cursor c; - RDF_Resource n; - PRBool err = PR_FALSE; - - XP_ASSERT(pane != NULL); - - if ((c = RDF_GetSources(pane->db, gNavCenter->RDF_Top, gCoreVocab->RDF_parent, - RDF_RESOURCE_TYPE, 1)) != NULL) - { - while ((n = RDF_NextValue(c)) != NULL) - { - if ((view = HT_NewView(n, pane, PR_TRUE, NULL, PR_FALSE)) == NULL) - { - err = PR_TRUE; - break; - } - } - RDF_DisposeCursor(c); - } - return(err); -} - - - -void -htNewWorkspace(HT_Pane pane, char *id, char *optionalTitle, uint32 workspacePos) -{ - RDF_Resource r; - - XP_ASSERT(pane != NULL); - XP_ASSERT(id != NULL); - if (pane == NULL) return; - if (id == NULL) return; - - if ((r = RDF_GetResource(pane->db, id, 0)) == NULL) - { - if ((r = RDF_GetResource(pane->db, id, 1)) != NULL) - { - setContainerp (r, PR_TRUE); - setResourceType (r, RDF_RT); - } - } - if (r != NULL) - { - if ((optionalTitle != NULL) && (optionalTitle[0] != '\0')) - { - RDF_Assert(pane->db, r, gCoreVocab->RDF_name, - optionalTitle, RDF_STRING_TYPE); - } - if (workspacePos != 0) - { - RDF_Assert(pane->db, r, gNavCenter->RDF_WorkspacePos, - (void *)&workspacePos, RDF_INT_TYPE); - } - RDFUtil_SetDefaultSelectedView(r); - RDF_Assert(pane->db, r, gCoreVocab->RDF_parent, - gNavCenter->RDF_Top, RDF_RESOURCE_TYPE); - } -} - - - -PR_PUBLIC_API(void) -HT_NewWorkspace(HT_Pane pane, char *id, char *optionalTitle) -{ - XP_ASSERT(pane != NULL); - XP_ASSERT(id != NULL); -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(optionalTitle)); -#endif - - if (pane == NULL) return; - if (id == NULL) return; - - htNewWorkspace(pane, id, optionalTitle, 0); -} - - - -HT_PaneStruct * -HT_GetHTPaneList () -{ - return(gHTTop); -} - - - -HT_PaneStruct * -HT_GetNextHTPane (HT_PaneStruct* pane) -{ - if (pane == NULL) - { - return(NULL); - } - return(pane->next); -} - - - -void -htSetWorkspaceOrder(RDF_Resource src, RDF_Resource dest, PRBool afterDestFlag) -{ - HT_Pane paneList; - HT_View *viewList, *prevViewList, srcView, *srcViewList; - PRBool foundSrc, foundDest; - - XP_ASSERT(src != NULL); - XP_ASSERT(dest != NULL); - if ((src == NULL) || (dest == NULL)) return; - - paneList = gHTTop; - while (paneList != NULL) - { - foundSrc = foundDest = PR_FALSE; - srcView = NULL; - prevViewList = srcViewList = NULL; - viewList = &(paneList->viewList); - while(*viewList) - { - if ((*viewList)->top->node == src) - { - srcView = (*viewList); - srcViewList = viewList; - foundSrc = PR_TRUE; - } - if ((*viewList)->top->node == dest) - { - foundDest = PR_TRUE; - } - if (foundDest == PR_FALSE) - { - prevViewList = viewList; - } - if (foundSrc == PR_TRUE && foundDest == PR_TRUE) - { - break; - } - viewList = &(*viewList)->next; - } - if (foundSrc == PR_TRUE && foundDest == PR_TRUE) - { - if (htIsOpLocked(srcView->top, - gNavCenter->RDF_WorkspacePosLock)) - { - return; - } - if (afterDestFlag == PR_TRUE) - { - /* move src workspace after dest workspace */ - - if ((*prevViewList)->next != NULL) - { - if (htIsOpLocked(((*prevViewList)->next)->top, - gNavCenter->RDF_WorkspacePosLock)) - { - return; - } - } - - *srcViewList = (*srcViewList)->next; - srcView->next = (*prevViewList)->next; - (*prevViewList)->next = srcView; - } - else - { - /* move src workspace before dest workspace */ - - if (prevViewList == NULL) - { - prevViewList = &(paneList->viewList); - } - else - { - prevViewList = &((*prevViewList)->next); - } - - if ((*prevViewList) != NULL) - { - if (htIsOpLocked((*prevViewList)->top, - gNavCenter->RDF_WorkspacePosLock)) - { - return; - } - } - *srcViewList = (*srcViewList)->next; - srcView->next = *prevViewList; - *prevViewList = srcView; - } - - saveWorkspaceOrder(paneList); - sendNotification(srcView->top, HT_EVENT_VIEW_WORKSPACE_REFRESH, - NULL, HT_COLUMN_UNKNOWN); - } - paneList = paneList->next; - } -} - - - -PR_PUBLIC_API(void) -HT_SetWorkspaceOrder(HT_View src, HT_View dest, PRBool afterDestFlag) -{ - XP_ASSERT(src != NULL); - XP_ASSERT(src->pane != NULL); - XP_ASSERT(dest != NULL); - XP_ASSERT(dest->pane != NULL); - XP_ASSERT(src->pane == dest->pane); - - if ((src == NULL) || (dest == NULL)) return; - - htSetWorkspaceOrder(src->top->node, dest->top->node, afterDestFlag); -} - - - -HT_View -HT_NewView (RDF_Resource topNode, HT_Pane pane, PRBool useColumns, void *feData, PRBool autoOpen) -{ - HT_Column *columnList, column, nextColumn; - HT_View view, *viewList; - RDF_Cursor cursor; - RDF_Resource r, selectedView; - PRBool err = PR_FALSE, workspaceAdded; - uint32 workspacePos; - - do - { - if ((view = (HT_View)getMem(sizeof(HT_ViewStruct))) == NULL) - { - err = PR_TRUE; - break; - } - view->pane = pane; - if ((view->top = newHTEntry(view, topNode)) == NULL) - { - err = PR_TRUE; - break; - } - - HT_SetViewFEData(view, feData); - - if (autoOpen) view->top->flags |= HT_OPEN_FLAG; - view->top->depth = 0; - - view->itemListSize = ITEM_LIST_SIZE; - if ((view->itemList = (HT_Resource **)getMem(ITEM_LIST_SIZE * 4)) == NULL) - { - err = PR_TRUE; - break; - } - - view->itemListCount = 0; - if (autoOpen) - { - refreshItemList(view->top, 0); - } - - if (useColumns) { - columnList = &view->columns; - if ((cursor = RDF_GetTargets(pane->db, view->top->node, gNavCenter->RDF_Column, - RDF_RESOURCE_TYPE, PR_TRUE)) != NULL) - { - while ((r = RDF_NextValue(cursor)) != NULL) - { - if (resourceID(r) == NULL) break; - - column = (HT_Column)getMem(sizeof(HT_ColumnStruct)); - if (column == NULL) { - err = PR_TRUE; - break; - } - - column->token = r; - column->tokenType = (uint32) RDF_GetSlotValue(pane->db, r, - gNavCenter->RDF_ColumnDataType, - RDF_INT_TYPE, PR_FALSE, PR_TRUE); - if (!column->tokenType) column->tokenType = HT_COLUMN_STRING; - column->width = (uint32) RDF_GetSlotValue(pane->db, r, - gNavCenter->RDF_ColumnWidth, - RDF_INT_TYPE, PR_FALSE, PR_TRUE); - column->name = (char *) RDF_GetSlotValue(pane->db, r, - gCoreVocab->RDF_name, - RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - *columnList = column; - columnList = &(column->next); - } - RDF_DisposeCursor(cursor); - } - } - - /* if no columns defined, force one (name) to exist */ - - if (view->columns == NULL) - { - column = (HT_Column)getMem(sizeof(HT_ColumnStruct)); - if (column == NULL) { - err = PR_TRUE; - break; - } - column->token = gCoreVocab->RDF_name; - column->tokenType = HT_COLUMN_STRING; - column->width = 10000; -#ifndef HT_RAPTOR - column->name = copyString(XP_GetString(RDF_DEFAULTCOLUMNNAME)); -#else - column->name = copyString("Name"); -#endif - - view->columns = column; - } - - /* - add into view list, taking into account any defined - workspace positions, workspace lock status, etc... - */ - - workspacePos = (uint32) RDF_GetSlotValue(gNCDB, - view->top->node, - gNavCenter->RDF_WorkspacePos, - RDF_INT_TYPE, PR_FALSE, PR_TRUE); - - view->workspacePos = workspacePos; - viewList = &(pane->viewList); - if (htIsOpLocked(view->top, gNavCenter->RDF_WorkspacePosLock)) - { - /* always insert locked workspaces BEFORE unlocked workspaces */ - workspaceAdded = PR_FALSE; - while ((*viewList) != NULL) - { - if ((!htIsOpLocked((*viewList)->top, gNavCenter->RDF_WorkspacePosLock)) || - ((*viewList)->workspacePos > workspacePos)) - { - view->next = (*viewList); - (*viewList) = view; - workspaceAdded = PR_TRUE; - break; - } - viewList = &((*viewList)->next); - } - if (workspaceAdded == PR_FALSE) - { - view->next = (*viewList); - (*viewList) = view; - } - } - else - { - /* always insert unlocked workspaces AFTER locked workspaces */ - if (workspacePos == 0) - { - /* - if unlocked and position not specified, - add onto end of view list - */ - while ((*viewList) != NULL) - { - viewList = &((*viewList)->next); - } - *viewList = view; - } - else - { - /* - if unlocked and position specified, - move past locked workspaces, and then - add into list - */ - while (((*viewList) != NULL) && - (htIsOpLocked((*viewList)->top, - gNavCenter->RDF_WorkspacePosLock))) - { - viewList = &((*viewList)->next); - } - while ((*viewList) != NULL) - { - if ((*viewList)->workspacePos > workspacePos) break; - viewList = &((*viewList)->next); - } - view->next = (*viewList); - (*viewList) = view; - } - } - ++(pane->viewListCount); - - sendNotification(view->top, HT_EVENT_VIEW_ADDED, NULL, HT_COLUMN_UNKNOWN); - - if (pane->special == PR_FALSE) - { - selectedView = RDFUtil_GetDefaultSelectedView(); - if ((selectedView == topNode) || (selectedView == NULL)) - { - HT_SetSelectedView(pane, view); - } - } - - } while (PR_FALSE); - - if (err == PR_TRUE) - { - if (view != NULL) - { - if (view->top != NULL) - { - freeMem(view->top); - } - if (view->itemList != NULL) - { - freeMem(view->itemList); - view->itemList = NULL; - } - column = view->columns; - while (column != NULL) - { - nextColumn = column->next; - freeMem(column); - column = nextColumn; - } - freeMem(view); - view = NULL; - } - } - return(view); -} - - - -void -sendNotification (HT_Resource node, HT_Event whatHappened, RDF_Resource s, HT_ColumnType type) -{ - HT_Pane pane; - HT_Notification ns; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - XP_ASSERT(node->view->pane != NULL); - - if (node->view == NULL) return; - if ((pane = node->view->pane) == NULL) return; - if ((ns = pane->ns) == NULL) return; - if (ns->notifyProc == NULL) return; - - if (pane->mask & whatHappened) - { - (*ns->notifyProc)(ns, node, whatHappened, s, type); - } - pane->dirty = PR_TRUE; -} - - - -void -deleteHTNode(HT_Resource node) -{ - HT_Value value,nextValue; - HT_View view; - HT_Resource parent; - ldiv_t cdiv; - uint32 bucketNum, itemListIndex, offset; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - - /* HT_SetSelectedState(node, PR_FALSE); */ - - sendNotification(node, (node->feData != NULL) ? - HT_EVENT_NODE_DELETED_DATA : HT_EVENT_NODE_DELETED_NODATA, - NULL, HT_COLUMN_UNKNOWN); - - itemListIndex = node->itemListIndex; - - value = node->values; - while (value != NULL) - { - nextValue = value->next; - if (value->tokenType == HT_COLUMN_STRING || - value->tokenType == HT_COLUMN_DATE_STRING) - { - if (value->data != NULL) - { - freeMem(value->data); - value->data = NULL; - } - } - freeMem(value); - value = nextValue; - } - node->values = NULL; - - if (node->flags & HT_FREEICON_URL_FLAG) - { - if (node->url[0] != NULL) - { - freeMem(node->url[0]); - node->url[0] = NULL; - } - if (node->url[1] != NULL) - { - freeMem(node->url[1]); - node->url[1] = NULL; - } - if (node->url[2] != NULL) - { - freeMem(node->url[2]); - node->url[2] = NULL; - } - if (node->url[3] != NULL) - { - freeMem(node->url[3]); - node->url[3] = NULL; - } - if (node->url[4] != NULL) - { - freeMem(node->url[4]); - node->url[4] = NULL; - } - } - - if ((!node->view->refreshingItemListp) && (node->view->itemList != NULL)) - { - /* set node's associated entry in itemList to NULL */ - - if (itemListIndex < node->view->itemListCount) - { - cdiv = ldiv(itemListIndex , ITEM_LIST_ELEMENT_SIZE); - bucketNum = (uint32)cdiv.quot; - offset = (uint32)cdiv.rem; - view = node->view; - if (*(view->itemList + bucketNum) != NULL) - { - *((*(view->itemList + bucketNum)) + offset) = NULL; - } - } - - /* update list count if list isn't busy */ - - if ((gBatchUpdate != PR_TRUE) && (node->view->itemListCount > 0)) - { - --(node->view->itemListCount); - } - } - - removeHTFromHash(node->view->pane, node); - if ((parent = node->parent) != NULL) - { - if (parent->numChildren > 0) --(parent->numChildren); - } - while (parent != NULL) - { - --(parent->numChildrenTotal); - parent=parent->parent; - } - node->node = NULL; - node->view = NULL; - node->parent = NULL; - node->child = NULL; - node->children = NULL; - freeMem(node); -} - - - -void -destroyViewInt (HT_Resource r, PRBool saveOpenState) -{ - HT_Resource child, tmp; - PRBool openState; - - child = r->child; - while (child != NULL) - { - /* save container's open/closed state */ - if (HT_IsContainer(child) && (child->view->pane->special == PR_FALSE)) - { - openState = remoteStoreHasAssertion(gLocalStore, child->node, - gNavCenter->RDF_AutoOpen, "yes", - RDF_STRING_TYPE, 1); - if ((!openState) && (HT_IsContainerOpen(child)) && - (!startsWith("ftp:", resourceID(child->node))) && - (!startsWith("es:", resourceID(child->node))) && - (!startsWith("ldap:", resourceID(child->node)))) - { - /* make assertion */ - remoteAssert(gLocalStore, child->node, - gNavCenter->RDF_AutoOpen, "yes", - RDF_STRING_TYPE, 1); - } - else if (openState && (!HT_IsContainerOpen(child))) - { - /* remove assertion */ - remoteUnassert(gLocalStore, child->node, - gNavCenter->RDF_AutoOpen, "yes", - RDF_STRING_TYPE); - } - } - if (child->child) - { - tmp=child->next; - destroyViewInt(child, saveOpenState); - if(child != NULL) - { - deleteHTNode(child); - } - child = tmp; - } - else - { - tmp = child; - child = child->next; - deleteHTNode(tmp); - } - } - r->child = NULL; - r->numChildren = 0; - r->numChildrenTotal = 0; -} - - - -PR_PUBLIC_API(HT_Error) -HT_DeleteView (HT_View view) -{ - HT_Column nextColumn; - HT_View *viewList; - HT_Pane pane; - HT_Resource **r; - uint32 loop, viewIndex; - - XP_ASSERT(view != NULL); - - if (view->top != NULL) /* delete nodes */ - { - destroyViewInt(view->top, PR_TRUE); - } - if (view->itemList != NULL) /* delete itemList */ - { - for (loop=0; loopitemListSize; loop++) - { - if ((r = (HT_Resource **)view->itemList[loop]) != NULL) - { - freeMem(r); - } - } - freeMem(view->itemList); - view->itemList = NULL; - } - - while (view->columns != NULL) /* delete columns */ - { - nextColumn = view->columns->next; - sendColumnNotification (view, view->columns->token, - view->columns->tokenType, HT_EVENT_COLUMN_DELETE); - if (view->columns->name != NULL) - { - freeMem(view->columns->name); - view->columns->name = NULL; - } - freeMem(view->columns); - view->columns = nextColumn; - } - view->columns = NULL; - - pane = HT_GetPane(view); - viewList = &(pane->viewList); - while (*viewList) - { - if (*viewList == view) - { - viewIndex = HT_GetViewIndex(view); - if (viewIndex > 0) --viewIndex; - - *viewList = view->next; - --(pane->viewListCount); - - /* - if deleting the selected view, - try and select another view - */ - - if ((gPaneDeletionMode != PR_TRUE) && (pane->selectedView == view)) - { - HT_SetSelectedView(pane, HT_GetNthView(pane, viewIndex)); - } - break; - } - viewList = &((*viewList)->next); - } - - sendNotification(view->top, HT_EVENT_VIEW_DELETED, NULL, HT_COLUMN_UNKNOWN); - if (gPaneDeletionMode != PR_TRUE) - { - sendNotification(view->top, HT_EVENT_VIEW_WORKSPACE_REFRESH, - NULL, HT_COLUMN_UNKNOWN); - } - - if (view->top != NULL) - { - deleteHTNode(view->top); - view->top = NULL; - } - - freeMem(view); - return (HT_NoErr); -} - - - -PR_PUBLIC_API(char *) -HT_GetViewName(HT_View view) -{ - char *name = NULL; - - XP_ASSERT(view != NULL); - XP_ASSERT(view->top != NULL); - - if (view != NULL) - { - HT_GetNodeData (view->top, gCoreVocab->RDF_name, HT_COLUMN_STRING, &name); - } -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(name)); -#endif - return(name); -} - - - -void -saveWorkspaceOrder(HT_Pane pane) -{ - HT_View view; - uint32 viewListIndex=1, workspacePos; - - XP_ASSERT(pane != NULL); - if (pane == NULL) return; - - view = pane->viewList; - while (view != NULL) - { - workspacePos = (uint32) RDF_GetSlotValue(gNCDB, - view->top->node, - gNavCenter->RDF_WorkspacePos, - RDF_INT_TYPE, PR_FALSE, PR_TRUE); - RDF_Unassert(gNCDB, view->top->node, - gNavCenter->RDF_WorkspacePos, - (void *)&workspacePos, RDF_INT_TYPE); - RDF_Assert(gNCDB, view->top->node, - gNavCenter->RDF_WorkspacePos, - (void *)&viewListIndex, RDF_INT_TYPE); - ++viewListIndex; - view = view->next; - } -} - - - -void -htDeletePane(HT_Pane pane, PRBool saveWorkspaceOrderFlag) -{ - HT_Pane *paneList; - HT_View view; - - XP_ASSERT(pane != NULL); - if (pane == NULL) return; - - if (saveWorkspaceOrderFlag == PR_TRUE) - { - saveWorkspaceOrder(pane); - } - gPaneDeletionMode = PR_TRUE; - while ((view = pane->viewList) != NULL) - { - HT_DeleteView(view); - } - gPaneDeletionMode = PR_FALSE; - if (pane->hash != NULL) - { - PL_HashTableDestroy(pane->hash); /* delete hash table */ - pane->hash = NULL; - } - if (pane->rns != NULL) - { - RDF_DeleteNotifiable (pane->rns); - pane->rns = NULL; - } - - paneList = &gHTTop; - while ((*paneList) != NULL) - { - if ((*paneList) == pane) - { - (*paneList) = pane->next; - break; - } - paneList = &(*paneList)->next; - } - - if (pane->templatePane) - htDeletePane(pane->templatePane, PR_FALSE); - - PaneDeleteSBPCleanup (pane); - freeMem(pane); -} - - - -PR_PUBLIC_API(HT_Error) -HT_DeletePane (HT_Pane pane) -{ - XP_ASSERT(pane != NULL); - - htDeletePane(pane, PR_TRUE); - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Resource) -HT_TopNode (HT_View view) -{ - HT_Resource top = NULL; - - XP_ASSERT(view != NULL); - - if (view != NULL) - { - top = view->top; - } - - return (top); -} - - - -void -resynchItem (HT_Resource node, void *token, void *data, PRBool assertAction) -{ - HT_Value *value, *nextValue, tempValue; - - XP_ASSERT(node != NULL); - - value = &(node->values); - while ((*value) != NULL) - { - nextValue = &((*value)->next); - if ((*value)->token == token) - { - if ((*value)->tokenType == HT_COLUMN_STRING || - (*value)->tokenType == HT_COLUMN_DATE_STRING) - { - if ((*value)->data) - { - freeMem((*value)->data); - (*value)->data = NULL; - } - } - - if ((assertAction == PR_FALSE) || (data == NULL)) - { - tempValue = (*value); - (*value) = (*value)->next; - freeMem(tempValue); - nextValue = value; - } - else if ((*value)->tokenType == HT_COLUMN_STRING || - (*value)->tokenType == HT_COLUMN_DATE_STRING) - { - - (*value)->data = copyString(data); - } - else - { - (*value)->data = data; - } - /* Note: don't "break", its possible to have multiple - tokens that are the same (they could be of different - types, for example: one is a STRING, another is an INT) */ - /* break; */ - } - value = nextValue; - } -} - - - -void -resynchContainer (HT_Resource container) -{ - HT_Resource parent, tc, nc = NULL, *child; - RDF_Cursor c; - RDF_Resource next, posResource; - PRBool found; - char *id, *pos; - uint32 n = 0; - - if ((c = RDF_GetSources(container->view->pane->db, container->node, - gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, 1)) != NULL) - { - while ((next = RDF_NextValue(c)) != NULL) - { - tc = container->child; - found = 0; - while (tc) - { - if (tc->node == next) - { - tc->unsortedIndex = n; - found = 1; - break; - } - tc = tc->next; - } - if (!found) - { - if ((nc = newHTEntry(container->view, next)) != NULL) - { - nc->dataSource = RDF_ValueDataSource(c); - nc->parent = container; - nc->depth = container->depth + 1; - ++container->numChildren; - nc->unsortedIndex = n; /* container->numChildren; */ - parent = container; - while (parent != NULL) - { - ++(parent->numChildrenTotal); - parent=parent->parent; - } - - /* attempt to insert new node in appropriate position */ - pos = NULL; - if ((id = PR_smprintf("pos(%s)", resourceID(nc->parent->node))) != NULL) - { - posResource = RDF_GetResource(gNCDB, id, PR_TRUE); - XP_FREE(id); - if (posResource != NULL) - { - HT_GetNodeData (nc, posResource, HT_COLUMN_STRING, &pos); - } - } - if (pos != NULL) - { - found = PR_FALSE; - child = &(container->child); - while ((*child) != NULL) - { - if (nodeCompareRtn(&nc, child) < 0) - { - found = PR_TRUE; - nc->next = *child; - *child = nc; - break; - } - child = &((*child)->next); - } - if (found == PR_FALSE) - { - *child = nc; - } - - } - else - { - nc->next = container->child; - container->child = nc; - } - } - break; - } - ++n; - } - RDF_DisposeCursor(c); - } - if (nc != NULL) - { - refreshContainerIndexes(container); - refreshItemList(nc, HT_EVENT_NODE_ADDED); - - if (gAutoEditNewNode == PR_TRUE) - { - gAutoEditNewNode = PR_FALSE; - HT_SetSelection (nc); - sendNotification(nc, HT_EVENT_NODE_SCROLLTO, NULL, HT_COLUMN_UNKNOWN); - sendNotification(nc, HT_EVENT_NODE_EDIT, NULL, HT_COLUMN_UNKNOWN); - } - if ((gAutoOpenPane != NULL) && (gAutoOpenPane == nc->view->pane)) - { - gAutoOpenPane = NULL; - HT_SetOpenState(nc, PR_TRUE); - nc->flags &= (~HT_INITED_FLAG); - } - - } - refreshItemList(container, HT_EVENT_VIEW_REFRESH); -} - - - -void -refreshContainerIndexes(HT_Resource container) -{ - HT_Resource child; - RDF_Cursor c; - RDF_Resource next; - uint32 unsortedIndex=0; - - if ((c = RDF_GetSources(container->view->pane->db, container->node, - gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, 1)) != NULL) - { - while ((next = RDF_NextValue(c)) != NULL) - { - child = container->child; - while (child) - { - if (child->node == next) - { - child->unsortedIndex = unsortedIndex; - break; - } - child = child->next; - } - ++unsortedIndex; - } - RDF_DisposeCursor(c); - } - -} - - - -HT_Resource -addContainerItem (HT_Resource container, RDF_Resource item) -{ - HT_Resource nc, ch, parent, *child; - PRBool found; - RDF_Resource posResource; - SBProvider sb; - char *id, *pos; - - if ((nc = newHTEntry(container->view, item)) != NULL) - { - ch = container->child; - nc->view = container->view; - nc->parent = container; - nc->depth = container->depth + 1; - ++container->numChildren; - - /* - nc->next = container->child; - container->child = nc; - */ - - /* attempt to insert new node in appropriate position */ - pos = NULL; - if ((id = PR_smprintf("pos(%s)", resourceID(nc->parent->node))) != NULL) - { - posResource = RDF_GetResource(gNCDB, id, PR_TRUE); - XP_FREE(id); - if (posResource != NULL) - { - HT_GetNodeData (nc, posResource, HT_COLUMN_STRING, &pos); - } - } - if (pos != NULL) - { - found = PR_FALSE; - child = &(container->child); - while ((*child) != NULL) - { - if (nodeCompareRtn(&nc, child) < 0) - { - found = PR_TRUE; - nc->next = *child; - *child = nc; - break; - } - child = &((*child)->next); - } - if (found == PR_FALSE) - { - *child = nc; - } - - } - else - { - nc->next = container->child; - container->child = nc; - } - - /* nc->unsortedIndex = container->numChildren; */ - refreshContainerIndexes(container); - - parent = container; - while (parent != NULL) - { - ++(parent->numChildrenTotal); - parent=parent->parent; - } - - sb = SBProviderOfNode(nc); - if (sb /* && sb->openp */) /*related links is always open ... */ - { - nc->flags |= HT_OPEN_FLAG; - } - else - { - nc->flags &= (~HT_OPEN_FLAG); - } - - refreshItemList(nc, HT_EVENT_NODE_ADDED); - - if (gAutoEditNewNode == PR_TRUE) - { - gAutoEditNewNode = PR_FALSE; - HT_SetSelection (nc); - sendNotification(nc, HT_EVENT_NODE_SCROLLTO, NULL, HT_COLUMN_UNKNOWN); - sendNotification(nc, HT_EVENT_NODE_EDIT, NULL, HT_COLUMN_UNKNOWN); - } - if ((gAutoOpenPane != NULL) && (gAutoOpenPane == nc->view->pane)) - { - gAutoOpenPane = NULL; - HT_SetOpenState(nc, PR_TRUE); - nc->flags &= (~HT_INITED_FLAG); - } - } - return(nc); -} - - - -void -removeHTFromHash (HT_Pane pane, HT_Resource item) -{ - HT_Resource htr, pr; - PLHashTable *hash; - - hash = pane->hash; - htr = PL_HashTableLookup(hash, item->node); - pr = htr; - while (htr != NULL) - { - if (htr == item) - { - if (pr == htr) - { - if (htr->nextItem) - { - PL_HashTableAdd(hash, item->node, - htr->nextItem); - } - else - { - PL_HashTableRemove(hash, item->node); - RDF_ReleaseResource(pane->db, item->node); - } - } - else - { - pr->nextItem = htr->nextItem; - } - } - pr = htr; - htr = htr->nextItem; - } -} - - - -void -deleteHTSubtree (HT_Resource subtree) -{ - HT_Resource child, next; - - child = subtree->child; - subtree->child = NULL; - while (child) - { - next = child->next; - if (HT_IsContainer(child)) - { - deleteHTSubtree(child); - } - /* removeHTFromHash(child->view->pane, child); */ - deleteHTNode(child); - child = next; - } -} - - - -void -deleteContainerItem (HT_Resource container, RDF_Resource item) -{ - HT_Resource nc, pr, nx = NULL; - HT_Pane pane; - - nc = container->child; - pr = nc; - while (nc != NULL) - { - if (nc->node == item) - { - nx = nc; - /* removeHTFromHash(container->view->pane, nx); */ - if (nc == pr) - { - container->child = nc->next; - } - else - { - pr->next = nc->next; - } - break; - } - pr = nc; - nc = nc->next; - } - if (nx == NULL) return; - - if (HT_IsContainer(nx)) - { - deleteHTSubtree(nx); - } - pane = nx->view->pane; - deleteHTNode(nx); - - if (gBatchUpdate != PR_TRUE) - { - refreshItemList(container, HT_EVENT_VIEW_REFRESH); - } - else - { - pane->dirty = PR_TRUE; - } -} - - - -char * -advertURLOfContainer (RDF r, RDF_Resource u) -{ - char *url = NULL; - - url = RDF_GetSlotValue(r, u, gNavCenter->RDF_HTMLURL, - RDF_STRING_TYPE, 0, 1); - return(url); -} - - - -uint32 -fillContainer (HT_Resource node) -{ - HT_Resource pr = NULL, rn; - RDF_Cursor c; - RDF_Resource next; - uint32 numElements=0; -#if defined(WIN32) || defined(XP_MAC) - char *advertURL; -#endif - - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - XP_ASSERT(node->view->pane != NULL); - XP_ASSERT(node->view->pane->db != NULL); - -#if defined(WIN32) || defined(XP_MAC) - advertURL = RDF_GetSlotValue (node->view->pane->db, node->node, - gNavCenter->RDF_HTMLURL, RDF_STRING_TYPE, 0, 1); -#endif - - if ((c = RDF_GetSources(node->view->pane->db, node->node, - gCoreVocab->RDF_parent, - RDF_RESOURCE_TYPE, PR_TRUE)) != NULL) - { - while ((next = RDF_NextValue(c)) != NULL) - { - if ((rn = newHTEntry(node->view, next)) == NULL) - break; - rn->dataSource = RDF_ValueDataSource(c); - rn->parent = node; - rn->unsortedIndex = numElements++; - rn->depth = node->depth+1; - if (pr == NULL) - { - node->child = rn; - } - else - { - pr->next = rn; - } - pr = rn; - } -#if defined(XP_WIN) || defined(XP_MAC) -#ifndef HT_RAPTOR - if (advertURL) XP_GetURLForView(node->view, advertURL); -#endif -#endif - RDF_DisposeCursor(c); - } - return(numElements); -} - - - -void -sendColumnNotification (HT_View view, void *token, uint32 tokenType, HT_Event whatHappened) -{ - HT_Pane pane; - HT_Notification ns; - - XP_ASSERT(view != NULL); - XP_ASSERT(view->pane != NULL); - - if (view == NULL) return; - if ((pane = view->pane) == NULL) return; - if ((ns = pane->ns) == NULL) return; - if (ns->notifyProc == NULL) return; - - if (pane->mask & whatHappened) - { - (*ns->notifyProc)(ns, HT_TopNode(view), whatHappened, token, tokenType); - } -} - - - -PR_PUBLIC_API(HT_Cursor) -HT_NewCursor (HT_Resource node) -{ - HT_Cursor c = NULL; - PRBool openFlag = PR_FALSE; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - - if ((node==NULL) /* || (!HT_IsContainer(node)) */) - { - return(NULL); - } - - if (gAutoOpenTo != NULL) - { - if (startsWith(resourceID(node->node), gAutoOpenTo)) - { - openFlag = PR_TRUE; - } - } - if (!openFlag) - { - if (HT_IsContainerOpen(node)) - { - openFlag = PR_TRUE; - } - else - { - /* determine if container should be auto opened */ - - if (node->view->pane->special == PR_TRUE) return(NULL); - - if (node->flags & HT_INITED_FLAG) return(NULL); - if (RDF_HasAssertion(gNCDB, node->node, gNavCenter->RDF_AutoOpen, - "yes", RDF_STRING_TYPE, 1)) - { - openFlag = PR_TRUE; - } - } - } - - if (openFlag == PR_TRUE) - { - node->flags |= (HT_INITED_FLAG | HT_OPEN_FLAG); - if ((c = (HT_Cursor)getMem(sizeof(HT_CursorStruct))) != NULL) - { - c->container = node; - if (node->child != NULL) - { - c->node = node->child; - c->numElements = node->numChildren; - } - else - { - c->numElements = fillContainer(node); - c->node = node->child; - } - } - } - return(c); -} - - - -PR_PUBLIC_API(HT_Cursor) -HT_NewColumnCursor (HT_View view) -{ - HT_Cursor cursor; - - XP_ASSERT(view != NULL); - - if ((cursor = (HT_Cursor)getMem(sizeof(HT_CursorStruct))) != NULL) - { - cursor->columns = view->columns; - } - return(cursor); -} - - - -PR_PUBLIC_API(PRBool) -HT_GetNextColumn(HT_Cursor cursor, char **colName, uint32 *colWidth, - void **token, uint32 *tokenType) -{ - HT_Column column; - - XP_ASSERT(cursor != NULL); - - if ((column = cursor->columns) == NULL) return(PR_FALSE); - - if (colName != NULL) { - *colName = column->name; -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(*colName)); -#endif - } - if (colWidth != NULL) *colWidth = column->width; - if (token != NULL) *token = column->token; - if (tokenType != NULL) *tokenType = column->tokenType; - - cursor->columns = column->next; - return(PR_TRUE); -} - - - -PR_PUBLIC_API(void) -HT_DeleteColumnCursor(HT_Cursor cursor) -{ - XP_ASSERT(cursor != NULL); - - freeMem(cursor); -} - - - -PR_PUBLIC_API(void) -HT_SetColumnOrder(HT_View view, void *srcColToken, void *destColToken, PRBool afterDestFlag) -{ - HT_Column *columnList, *srcCol = NULL, *destCol = NULL, temp; - - XP_ASSERT(view != NULL); - XP_ASSERT(srcColToken != NULL); - XP_ASSERT(destColToken != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == srcColToken) - { - srcCol = columnList; - } - else if ((*columnList)->token == destColToken) - { - destCol = columnList; - } - columnList = &((*columnList)->next); - } - if ((srcCol != NULL) && (destCol != NULL)) - { - temp = *srcCol; - *srcCol = (*srcCol)->next; - if (afterDestFlag == PR_TRUE) - { - (*srcCol)->next = (*destCol)->next; - (*destCol)->next = *srcCol; - } - else - { - temp->next = *destCol; - *destCol = temp; - } - sendColumnNotification(view, (*srcCol)->token, - (*srcCol)->tokenType, HT_EVENT_COLUMN_REORDER); - } - } -} - - - -PR_PUBLIC_API(uint32) -HT_GetColumnWidth(HT_View view, void *token, uint32 tokenType) -{ - HT_Column *columnList; - uint32 width = 0; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - if (!((*columnList)->isHiddenFlag)) - { - width = (*columnList)->width; - } - break; - } - columnList = &((*columnList)->next); - } - } - return(width); -} - - - -PR_PUBLIC_API(void) -HT_SetColumnWidth(HT_View view, void *token, uint32 tokenType, uint32 width) -{ - HT_Column *columnList; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - (*columnList)->width = width; - sendColumnNotification(view, token, tokenType, HT_EVENT_COLUMN_SIZETO); - break; - } - columnList = &((*columnList)->next); - } - } -} - - - -PR_PUBLIC_API(PRBool) -HT_GetColumnVisibility(HT_View view, void *token, uint32 tokenType) -{ - HT_Column *columnList; - PRBool isHiddenFlag = PR_TRUE; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - isHiddenFlag = (*columnList)->isHiddenFlag; - break; - } - columnList = &((*columnList)->next); - } - } - return ((isHiddenFlag == PR_TRUE) ? PR_FALSE : PR_TRUE); -} - - - -PR_PUBLIC_API(void) -HT_SetColumnVisibility(HT_View view, void *token, uint32 tokenType, PRBool isHiddenFlag) -{ - HT_Column *columnList; - HT_Event theEvent; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - if ((*columnList)->isHiddenFlag != isHiddenFlag) - { - (*columnList)->isHiddenFlag = isHiddenFlag; - theEvent = (isHiddenFlag) ? HT_EVENT_COLUMN_HIDE : HT_EVENT_COLUMN_SHOW; - sendColumnNotification(view, token, tokenType, theEvent); - } - break; - } - columnList = &((*columnList)->next); - } - } -} - - - -PR_PUBLIC_API(void) -HT_ShowColumn(HT_View view, void *token, uint32 tokenType) -{ - HT_SetColumnVisibility(view, token, tokenType, PR_FALSE); -} - - - -PR_PUBLIC_API(void) -HT_HideColumn(HT_View view, void *token, uint32 tokenType) -{ - HT_SetColumnVisibility(view, token, tokenType, PR_TRUE); -} - - - -PR_PUBLIC_API(void) -HT_SetSortColumn(HT_View view, void *token, uint32 tokenType, PRBool descendingFlag) -{ - XP_ASSERT(view != NULL); - - view->sortToken = token; - view->sortTokenType = tokenType; - view->descendingFlag = descendingFlag; - - refreshItemList(HT_TopNode(view), 0); - sendColumnNotification(view, token, tokenType, HT_EVENT_VIEW_SORTING_CHANGED); -} - - - -PR_PUBLIC_API(void) -HT_SetColumnFEData(HT_View view, void *token, void *data) -{ - HT_Column *columnList; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - (*columnList)->feData = data; - break; - } - columnList = &((*columnList)->next); - } - } -} - - - -PR_PUBLIC_API(void *) -HT_GetColumnFEData (HT_View view, void *token) -{ - HT_Column *columnList; - void *data = NULL; - - XP_ASSERT(view != NULL); - XP_ASSERT(token != NULL); - - if ((columnList = &(view->columns)) != NULL) - { - while ((*columnList) != NULL) - { - if ((*columnList)->token == token) - { - data = (*columnList)->feData; - break; - } - columnList = &((*columnList)->next); - } - } - return(data); -} - - - -PR_PUBLIC_API(PRBool) -HT_ContainerSupportsNaturalOrderSort(HT_Resource container) -{ - HT_Resource parent; - PRBool naturalOrder = PR_FALSE; - - if ((container != NULL) && HT_IsContainer(container)) - { - if (container->view->sortToken == NULL) - { - if ((container->node == RDFUtil_GetQuickFileFolder()) || - (container->node == RDFUtil_GetPTFolder())) - { - naturalOrder = PR_TRUE; - } - else - { - parent = container->parent; - if (parent != NULL) - { - naturalOrder = remoteStoreHasAssertion(gLocalStore, container->node, - gCoreVocab->RDF_parent, parent->node, RDF_RESOURCE_TYPE, 1); - } - } - } - } - return (naturalOrder); -} - - - -PR_PUBLIC_API(HT_Error) -HT_DeleteCursor (HT_Cursor cursor) -{ - XP_ASSERT(cursor != NULL); - - if (cursor != NULL) - { - freeMem(cursor); - } - return(HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Resource) -HT_GetNextItem (HT_Cursor cursor) -{ - HT_Resource ans = NULL; - - XP_ASSERT(cursor != NULL); - - if (cursor != NULL) - { - if ((ans = cursor->node) != NULL) - { - cursor->node = ans->next; - } - } - return(ans); -} - - - -/* obsolete/old; use HT_NewContextualMenuCursor instead */ - -PR_PUBLIC_API(HT_Cursor) -HT_NewContextMenuCursor (HT_Resource node) -{ - HT_Cursor cursor; - - XP_ASSERT(node != NULL); - - if ((cursor = (HT_Cursor)getMem(sizeof(HT_CursorStruct))) != NULL) - { - cursor->node = node; - cursor->contextMenuIndex = 0; - cursor->commandExtensions = PR_FALSE; - if (node != NULL) - { - cursor->isWorkspaceFlag = ((node->parent == NULL) ? PR_TRUE:PR_FALSE); - } - else - { - cursor->isWorkspaceFlag = PR_FALSE; - } - } - return(cursor); -} - - - -PR_PUBLIC_API(HT_Cursor) -HT_NewContextualMenuCursor (HT_View view, PRBool workspaceMenuCmds, PRBool backgroundMenuCmds) -{ - HT_Cursor cursor; - - if ((cursor = (HT_Cursor)getMem(sizeof(HT_CursorStruct))) != NULL) - { - cursor->node = (view != NULL) ? view->top : NULL; - cursor->contextMenuIndex = 0; - cursor->isWorkspaceFlag = workspaceMenuCmds; - cursor->isBackgroundFlag = backgroundMenuCmds; - cursor->commandExtensions = PR_FALSE; - } - return(cursor); -} - - - -PRBool -htIsMenuCmdEnabled(HT_Pane pane, HT_MenuCmd menuCmd, - PRBool isWorkspaceFlag, PRBool isBackgroundFlag) -{ - HT_Resource node, nextNode; - HT_View *viewList; - PRBool multSelection = PR_FALSE, enableFlag = PR_FALSE; - PRBool mcEnabled = PR_FALSE; - RDF_BT type; - RDF_Resource bmFolder, nbFolder, ptFolder, rNode; - int16 menuIndex; - - if (menuCmd == HT_CMD_SEPARATOR) return(PR_FALSE); - - menuIndex=0; - while (menus[menuIndex] >=0) - { - if (menus[menuIndex] == menuCmd) - { - break; - } - ++menuIndex; - } - /* - if (menus[menuIndex] < 0) return(PR_FALSE); - */ - - if (isWorkspaceFlag == PR_TRUE || isBackgroundFlag == PR_TRUE) - { - node = NULL; - nextNode = NULL; - } - else - { - if (pane->selectedView == NULL || (node = HT_GetNextSelection(pane->selectedView, NULL)) == NULL) - { - return(PR_FALSE); - } - if ((nextNode = HT_GetNextSelection(pane->selectedView, node)) != NULL) - { - multSelection = PR_TRUE; - } - } - - do - { - if (node != NULL) - { - if ((rNode = node->node) == NULL) return(PR_FALSE); - - if (HT_IsContainer(node)) - { - type = resourceType(rNode); - } - else - { - type = resourceType(node->parent->node); - } - } - - switch(menus[menuIndex]) - { - case HT_CMD_OPEN: - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (node->view->pane->personaltoolbar == PR_TRUE) - return(PR_FALSE); - break; -#ifdef SMART_MAIL - case HT_CMD_GET_NEW_MAIL: - if (isBackgroundFlag && - (resourceType(pane->viewList->top->node) == PM_RT)) { - return(PR_TRUE); - } else { - return(PR_FALSE); - } - break; -#endif - case HT_CMD_OPEN_FILE: - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != LFS_RT) return(PR_FALSE); - break; - - case HT_CMD_PRINT_FILE: - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != LFS_RT) return(PR_FALSE); - break; - - case HT_CMD_OPEN_NEW_WIN: - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (HT_IsSeparator(node)) return(PR_FALSE); - if (resourceType(node->node) == LFS_RT) return(PR_FALSE); - if (resourceType(node->node) == COOKIE_RT) - return(PR_FALSE); - break; - - case HT_CMD_OPEN_COMPOSER: -#ifdef EDITOR - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (HT_IsSeparator(node)) return(PR_FALSE); - if (resourceType(node->node) == LFS_RT) return(PR_FALSE); - - /* - XXX to do - - Composer needs to expose a routine similar - to FE_MakeNewWindow() for opening a URL in - an editor window - */ - return(PR_FALSE); -#else - return(PR_FALSE); -#endif /* EDITOR */ - break; - - case HT_CMD_NEW_WORKSPACE: - if (!isWorkspaceFlag) return(PR_FALSE); - break; - - case HT_CMD_OPEN_AS_WORKSPACE: - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (htIsOpLocked(node, gNavCenter->RDF_CopyLock)) - return(PR_FALSE); - if (resourceType(node->node) == COOKIE_RT) - return(PR_FALSE); - break; - - case HT_CMD_NEW_BOOKMARK: - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - else - { - if (!HT_IsLocalData(node)) return(PR_FALSE); - } - if (node == NULL) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if (multSelection == PR_TRUE) return(PR_FALSE); - if (!HT_IsContainer(node)) - { - if (node->view->pane->personaltoolbar == PR_TRUE) - return(PR_FALSE); - } - if (htIsOpLocked(node, gNavCenter->RDF_AddLock)) - return(PR_FALSE); - break; - - case HT_CMD_NEW_FOLDER: - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - else - { - if (!HT_IsLocalData(node)) return(PR_FALSE); - } - if (node == NULL) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if (multSelection == PR_TRUE) return(PR_FALSE); - if (!HT_IsContainer(node)) - { - if (node->view->pane->personaltoolbar == PR_TRUE) - return(PR_FALSE); - } - if (htIsOpLocked(node, gNavCenter->RDF_AddLock)) - return(PR_FALSE); - break; - - case HT_CMD_NEW_SEPARATOR: - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - else - { - if (!HT_IsLocalData(node)) return(PR_FALSE); - } - if (node == NULL) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if (multSelection == PR_TRUE) return(PR_FALSE); - if (!HT_IsContainer(node)) - { - if (node->view->pane->personaltoolbar == PR_TRUE) - return(PR_FALSE); - } - if (htIsOpLocked(node, gNavCenter->RDF_AddLock)) - return(PR_FALSE); - break; - - case HT_CMD_MAKE_ALIAS: - if (node == NULL) return(PR_FALSE); - if (resourceType(node->node) != LFS_RT) return(PR_FALSE); - break; - - case HT_CMD_ADD_TO_BOOKMARKS: - if (node == NULL) return(PR_FALSE); - if (multSelection == PR_TRUE) return(PR_FALSE); - if ((bmFolder = RDFUtil_GetQuickFileFolder()) == NULL) - return(PR_FALSE); - if (HT_IsContainer(node)) - { - if (node->node == bmFolder) return(PR_FALSE); - if (resourceType(node->node) == COOKIE_RT) - return(PR_FALSE); - } - else - { - if (node->parent->node == bmFolder) - return(PR_FALSE); - if (resourceType(node->parent->node) == COOKIE_RT) - return(PR_FALSE); - } - if (htIsOpLocked(node, gNavCenter->RDF_CopyLock)) - return(PR_FALSE); - break; - - case HT_CMD_SAVE_AS: - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (HT_IsSeparator(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - break; - - case HT_CMD_CREATE_SHORTCUT: - if (node == NULL) return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - if (HT_IsSeparator(node)) return(PR_FALSE); - if (resourceType(node->node) == COOKIE_RT) - return(PR_FALSE); - break; - - case HT_CMD_SET_TOOLBAR_FOLDER: - return(PR_FALSE); - /* - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if ((ptFolder = RDFUtil_GetPTFolder()) == NULL) - return(PR_FALSE); - if (node->node == ptFolder) return(PR_FALSE); - if (node->view->pane->personaltoolbar == PR_TRUE) - return(PR_FALSE); - if (!HT_IsLocalData(node)) return(PR_FALSE); - */ - break; - - case HT_CMD_SET_BOOKMARK_MENU: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if ((bmFolder = RDFUtil_GetQuickFileFolder()) == NULL) - return(PR_FALSE); - if (node->node == bmFolder) return(PR_FALSE); - if (!HT_IsLocalData(node)) return(PR_FALSE); - break; - - case HT_CMD_REMOVE_BOOKMARK_MENU: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if ((bmFolder = RDFUtil_GetQuickFileFolder()) == NULL) - return(PR_FALSE); - if (node->node != bmFolder) return(PR_FALSE); - break; - - case HT_CMD_SET_BOOKMARK_FOLDER: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if ((nbFolder = RDFUtil_GetNewBookmarkFolder()) == NULL) - return(PR_FALSE); - if (node->node == nbFolder) return(PR_FALSE); - if (!HT_IsLocalData(node)) return(PR_FALSE); - break; - - case HT_CMD_REMOVE_BOOKMARK_FOLDER: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if ((nbFolder = RDFUtil_GetNewBookmarkFolder()) == NULL) - return(PR_FALSE); - if (node->node != nbFolder) return(PR_FALSE); - break; - - case HT_CMD_CUT: - if (node == NULL) return(PR_FALSE); - if (node->parent == NULL) return(PR_FALSE); - if (node->parent->node == NULL) return(PR_FALSE); - if ((resourceType(node->parent->node) != RDF_RT) && - (resourceType(node->parent->node) != HISTORY_RT) && - (resourceType(node->parent->node) != COOKIE_RT) && - (resourceType(node->parent->node) != SEARCH_RT)) - return(PR_FALSE); - if (HT_IsContainer(node)) - { - if (node->node == gNavCenter->RDF_HistoryBySite || - node->node == gNavCenter->RDF_HistoryByDate || - node->node == gNavCenter->RDF_Search) - return(PR_FALSE); - if ((ptFolder = RDFUtil_GetPTFolder()) != NULL) - { - if (node->node == ptFolder) - return(PR_FALSE); - } - if ((bmFolder = RDFUtil_GetNewBookmarkFolder()) != NULL) - { - if (node->node == bmFolder) - return(PR_FALSE); - } - } - if (htIsOpLocked(node, gNavCenter->RDF_DeleteLock)) - return(PR_FALSE); - break; - - case HT_CMD_COPY: - if (node == NULL) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if (htIsOpLocked(node, gNavCenter->RDF_CopyLock)) - return(PR_FALSE); - break; - - case HT_CMD_PASTE: - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) != RDF_RT) return(PR_FALSE); - if (htIsOpLocked(node, gNavCenter->RDF_AddLock)) - return(PR_FALSE); - break; - - case HT_CMD_UNDO: - return(PR_FALSE); - break; - - case HT_CMD_RENAME: - if (node == NULL) return(PR_FALSE); - if (isWorkspaceFlag == PR_TRUE) return(PR_FALSE); - if (multSelection == PR_TRUE) return(PR_FALSE); - if (!HT_IsContainer(node)) - { - if (resourceType(node->parent->node) != RDF_RT) - return(PR_FALSE); - } - else - { - if (resourceType(node->node) != RDF_RT) - return(PR_FALSE); - } - if (HT_IsSeparator(node)) return(PR_FALSE); - if (htIsOpLocked(node, gNavCenter->RDF_NameLock)) - return(PR_FALSE); - break; - - case HT_CMD_DELETE_FILE: - if (node == NULL) return(PR_FALSE); - type = resourceType(node->parent->node); - if (type != LFS_RT && type != ES_RT && type != FTP_RT && type != PM_RT) - return(PR_FALSE); - if (HT_IsContainer(node)) return(PR_FALSE); - break; - - case HT_CMD_DELETE_FOLDER: - if (node == NULL) return(PR_FALSE); - type = resourceType(node->node); - if (type != LFS_RT && type != ES_RT && type != FTP_RT) - return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - break; - - case HT_CMD_REVEAL_FILEFOLDER: - if (node == NULL) return(PR_FALSE); -#ifdef XP_MAC - if (resourceType(node->node) != LFS_RT) return(PR_FALSE); -#else - return(PR_FALSE); -#endif - break; - - case HT_CMD_PROPERTIES: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - if (node != NULL) - { - if (HT_IsSeparator(node)) return(PR_FALSE); - if (HT_IsContainer(node)) - { - if (type == HISTORY_RT) return(PR_FALSE); - } - } - break; - - case HT_CMD_RENAME_WORKSPACE: - if (!isWorkspaceFlag) return(PR_FALSE); - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (pane == NULL) return(PR_FALSE); - if (pane->selectedView == NULL) return(PR_FALSE); - if (htIsOpLocked(pane->selectedView->top, gNavCenter->RDF_NameLock)) - return(PR_FALSE); - break; - - case HT_CMD_DELETE_WORKSPACE: - if (!isWorkspaceFlag) return(PR_FALSE); - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (pane == NULL) return(PR_FALSE); - if (pane->selectedView == NULL) return(PR_FALSE); - rNode = pane->selectedView->top->node; - if (rNode == NULL) return(PR_FALSE); - if (rNode == gNavCenter->RDF_BookmarkFolderCategory || - rNode == gNavCenter->RDF_LocalFiles || - rNode == gNavCenter->RDF_History || - rNode == gNavCenter->RDF_Search) - return(PR_FALSE); - if (htIsOpLocked(pane->selectedView->top, gNavCenter->RDF_DeleteLock)) - return(PR_FALSE); - break; - - case HT_CMD_MOVE_WORKSPACE_UP: - if (isWorkspaceFlag == PR_FALSE) return(PR_FALSE); - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (pane == NULL) return(PR_FALSE); - if (pane->selectedView == NULL) return(PR_FALSE); - if (pane->selectedView == pane->viewList) - return(PR_FALSE); - if (htIsOpLocked(pane->selectedView->top, gNavCenter->RDF_WorkspacePosLock)) - return(PR_FALSE); - viewList = &(pane->viewList); - while ((*viewList) != NULL) - { - if ((*viewList)->next != NULL) - { - if ((*viewList)->next == pane->selectedView) - { - if (htIsOpLocked((*viewList)->top, - gNavCenter->RDF_WorkspacePosLock)) - { - return(PR_FALSE); - } - } - } - viewList = &((*viewList)->next); - } - break; - - case HT_CMD_MOVE_WORKSPACE_DOWN: - if (isWorkspaceFlag == PR_FALSE) return(PR_FALSE); - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (pane == NULL) return(PR_FALSE); - if (pane->selectedView == NULL) return(PR_FALSE); - if (pane->selectedView->next == NULL) return(PR_FALSE); - if (htIsOpLocked(pane->selectedView->top, gNavCenter->RDF_WorkspacePosLock)) - return(PR_FALSE); - break; - - case HT_CMD_REFRESH: - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - if (node != NULL) - { - if (!HT_IsContainer(node)) return(PR_FALSE); - } - break; - - case HT_CMD_FIND: - if (multSelection == PR_TRUE) return(PR_FALSE); - break; - - case HT_CMD_EXPORT: - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - if (pane->selectedView == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - if (node == NULL) return(PR_FALSE); - if (!HT_IsContainer(node)) return(PR_FALSE); - if (resourceType(node->node) == LFS_RT) return(PR_FALSE); - if (resourceType(node->node) == ATALK_RT) - return(PR_FALSE); - if (resourceType(node->node) == ATALKVIRTUAL_RT) - return(PR_FALSE); - if (htIsOpLocked(node, gNavCenter->RDF_CopyLock)) - return(PR_FALSE); - break; - - case HT_CMD_EXPORTALL: - if (isWorkspaceFlag == PR_FALSE) return(PR_FALSE); - if (isBackgroundFlag == PR_TRUE) return(PR_FALSE); - if (!gMissionControlEnabled) return(PR_FALSE); - break; - -#ifdef HT_PASSWORD_RTNS - - case HT_CMD_SET_PASSWORD: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - if (node != NULL) - { - if (!HT_IsContainer(node)) return(PR_FALSE); - } - break; - - case HT_CMD_REMOVE_PASSWORD: - if (multSelection == PR_TRUE) return(PR_FALSE); - if (node == NULL) - { - if (pane == NULL) return(PR_FALSE); - node = HT_TopNode(pane->selectedView); - } - if (node != NULL) - { - if (!HT_IsContainer(node)) return(PR_FALSE); - if (ht_hasPassword(node) == PR_FALSE) return(PR_FALSE); - } - break; - -#endif - - default: - /* process commands from the RDF graph last */ - return(PR_TRUE); - break; - } - - if (node != NULL) - { - - node = nextNode; - if (node == NULL) break; - if (pane == NULL) - { - node = NULL; - break; - } - nextNode = HT_GetNextSelection(pane->selectedView, node); - } - } while (node != NULL); - return(PR_TRUE); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsMenuCmdEnabled(HT_Pane pane, HT_MenuCmd menuCmd) -{ - return(htIsMenuCmdEnabled(pane, menuCmd, PR_FALSE, PR_FALSE)); -} - - - -PR_PUBLIC_API(PRBool) -HT_NextContextMenuItem (HT_Cursor cursor, HT_MenuCmd *menuCmd) -{ - HT_MenuCommand *menuList; - HT_Resource node; - RDF_Resource graphCommand; - PRBool sepFlag = PR_FALSE, enableFlag = PR_FALSE; - int16 menuIndex; - - XP_ASSERT(cursor != NULL); - XP_ASSERT(menuCmd != NULL); - - if (cursor->commandExtensions == PR_FALSE) - { - /* process internal, well-known commands first */ - - menuIndex = cursor->contextMenuIndex; - while (menus[menuIndex] >= 0) - { - if (menus[menuIndex] == HT_CMD_SEPARATOR) - { - if (cursor->foundValidMenuItem == PR_TRUE) - { - sepFlag = PR_TRUE; - } - ++menuIndex; - continue; - } - - node = cursor->node; - enableFlag = htIsMenuCmdEnabled( - (node != NULL) ? node->view->pane : NULL, - menus[menuIndex], - cursor->isWorkspaceFlag, - cursor->isBackgroundFlag); - if (enableFlag == PR_FALSE) - { - ++menuIndex; - continue; - } - - if (sepFlag == PR_TRUE) - { - *menuCmd = HT_CMD_SEPARATOR; - cursor->contextMenuIndex = menuIndex; - } - else - { - *menuCmd = menus[menuIndex]; - cursor->contextMenuIndex = ++menuIndex; - cursor->foundValidMenuItem = PR_TRUE; - } - break; - } - if ((menus[menuIndex] == -1) && (node != NULL)) - { - cursor->commandExtensions = PR_TRUE; - cursor->container = NULL; - cursor->foundValidMenuItem = PR_FALSE; - cursor->menuCmd = (HT_MenuCmd)(NUM_MENU_CMDS+1); - - /* process commands from the RDF graph last */ - freeMenuCommandList(); - while (PR_TRUE) - { - if (cursor->cursor == NULL) - { - if ((cursor->container = HT_GetNextSelection(cursor->node->view, cursor->container)) != NULL) - { - cursor->cursor = RDF_GetSources(gNCDB, cursor->container->node, - gNavCenter->RDF_Command, RDF_RESOURCE_TYPE, 1); - } - else - { - cursor->menuCommandList = menuCommandsList; - break; - } - } - if (cursor->cursor == NULL) break; - if ((graphCommand = RDF_NextValue(cursor->cursor)) != NULL) - { - /* add graph command at end of list, and only once */ - - menuList = &menuCommandsList; - while ((*menuList) != NULL) - { - if ((*menuList)->graphCommand == graphCommand) break; - menuList = &((*menuList)->next); - } - if ((*menuList) == NULL) - { - if (((*menuList) = (HT_MenuCommand)getMem(sizeof(_HT_MenuCommandStruct))) != NULL) - { - cursor->foundValidMenuItem = PR_TRUE; - (*menuList)->menuCmd = cursor->menuCmd++; - (*menuList)->graphCommand = graphCommand; - (*menuList)->name = RDF_GetSlotValue(gNCDB, graphCommand, - gCoreVocab->RDF_name, RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - } - } - } - else - { - RDF_DisposeCursor(cursor->cursor); - cursor->cursor = NULL; - } - } - - if (cursor->foundValidMenuItem == PR_TRUE) - { - cursor->foundValidMenuItem = PR_FALSE; - *menuCmd = HT_CMD_SEPARATOR; - enableFlag = PR_TRUE; - } - - } - } - else - { - if (cursor->menuCommandList != NULL) - { - *menuCmd = cursor->menuCommandList->menuCmd; - cursor->menuCommandList = cursor->menuCommandList->next; - enableFlag = PR_TRUE; - } - - } - return(enableFlag); -} - - - -PR_PUBLIC_API(void) -HT_DeleteContextMenuCursor(HT_Cursor cursor) -{ - XP_ASSERT(cursor != NULL); - - if (cursor != NULL) - { - freeMem(cursor); - } -} - - - -void -freeMenuCommandList() -{ - HT_MenuCommand menuCommand; - - menuCommand = menuCommandsList; - while (menuCommand != NULL) - { - if (menuCommand->name != NULL) freeMem(menuCommand->name); - menuCommand = menuCommand->next; - } - menuCommandsList = NULL; -} - - - -PR_PUBLIC_API(char *) -HT_GetMenuCmdName(HT_MenuCmd menuCmd) -{ - HT_MenuCommand menuCommand; - char *menuName = NULL; - -#ifndef HT_RAPTOR - if (menuCmd < NUM_MENU_CMDS) - { - menuName = XP_GetString(RDF_CMD_0 + menuCmd); - } - else - { - menuCommand = menuCommandsList; - while (menuCommand != NULL) - { - if (menuCommand->menuCmd == menuCmd) - { - menuName = menuCommand->name; - break; - } - menuCommand = menuCommand->next; - } - } - XP_ASSERT( IsUTF8String(menuName)); -#endif - return(menuName); -} - - - -void -exportCallbackWrite(PRFileDesc *fp, char *str) -{ - XP_ASSERT(fp != NULL); - - if (str != NULL) - { - PR_Write(fp, str, strlen(str)); - } -} - - - -void -exportCallback(MWContext *context, char *filename, RDF_Resource node) -{ - PRFileDesc *fp; - char *fileURL; - - XP_ASSERT(node != NULL); - - if (filename != NULL) - { - -#ifdef XP_WIN - fileURL = append2Strings("file:///", filename); -#else - fileURL = append2Strings("file://", filename); -#endif - - if (fileURL != NULL) - { - if ((fp = CallPROpenUsingFileURL(fileURL, - (PR_CREATE_FILE | PR_WRONLY | PR_TRUNCATE), - 0644)) != NULL) - { - outputRDFTree(gNCDB, fp, node); - PR_Close(fp); - } - freeMem(fileURL); - } - } -} - - - -PR_PUBLIC_API(HT_Error) -HT_DoMenuCmd(HT_Pane pane, HT_MenuCmd menuCmd) -{ -#ifndef HT_RAPTOR - - Chrome chrome; - HT_Error error = 0; - HT_MenuCommand menuCommand; - HT_Resource node, topNode; - HT_View view, *viewList; - RDF_Resource rNode, newTopNode=NULL; - URL_Struct *urls; - PRBool needRefresh = PR_FALSE, openState, emptyClipboard = PR_TRUE, doAbout = PR_FALSE; - PRBool onlyUpdateBookmarks = PR_FALSE, onlyUpdatePersonalToolbar = PR_FALSE; - uint32 uniqueCount=0; - char *title, *url; - -#ifdef HT_PASSWORD_RTNS - char *password1, *password2; -#endif - - XP_ASSERT(pane != NULL); - view = HT_GetSelectedView(pane); - XP_ASSERT(view != NULL); - - gBatchUpdate = PR_TRUE; - switch(menuCmd) - { - case HT_CMD_NEW_WORKSPACE: - /* XXX localization */ - if (FE_Confirm(((MWContext *)gRDFMWContext(NULL)), - "Create a workspace for remote data?")) - { - /* XXX localization */ - if ((url = FE_Prompt(((MWContext *)gRDFMWContext(NULL)), - "Enter the URL for the remote workspace:", "http://")) != NULL) - { - if (url[0] != '\0') - { - HT_NewWorkspace(pane, url, NULL); - } - } - } - else - { - uniqueCount = 0; - do - { - url = PR_smprintf("container%d.rdf", - (int)++uniqueCount); - rNode = RDF_GetResource(pane->db, url, PR_FALSE); - if ((rNode != NULL) && (url != NULL)) - { - XP_FREE(url); - url = NULL; - } - } while (rNode != NULL); - if ((url != NULL) && (title = FE_Prompt(((MWContext *)gRDFMWContext(NULL)), - XP_GetString(RDF_NEWWORKSPACEPROMPT), "")) != NULL) - { - if (!strcmp(title, "about")) - { - XP_FREE(title); - title = NULL; - XP_FREE(url); - url = PR_smprintf("http://people.netscape.com/rjc/about.rdf#root"); - } - HT_NewWorkspace(pane, url, title); - } - if (title != NULL) - { - XP_FREE(title); - title = NULL; - } - if (url != NULL) - { - XP_FREE(url); - url = NULL; - } - } - break; - - case HT_CMD_RENAME_WORKSPACE: - if (view == NULL) break; - if ((topNode = HT_TopNode(view)) == NULL) break; - sendNotification(topNode, HT_EVENT_WORKSPACE_EDIT, NULL, HT_COLUMN_UNKNOWN); - break; - - case HT_CMD_DELETE_WORKSPACE: - if (view == NULL) break; - if ((topNode = HT_TopNode(view)) == NULL) break; - if (FE_Confirm(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_DELETEWORKSPACE), - HT_GetViewName(topNode->view)))) - { - RDF_AssertPR_FALSE(view->pane->db, topNode->node, gCoreVocab->RDF_parent, - gNavCenter->RDF_Top, RDF_RESOURCE_TYPE); - } - break; - - case HT_CMD_MOVE_WORKSPACE_UP: - viewList = &(pane->viewList); - while (*viewList) - { - if ((*viewList)->next == view) - { - HT_SetWorkspaceOrder(view, *viewList, PR_FALSE); - break; - } - viewList = &((*viewList)->next); - } - break; - - case HT_CMD_MOVE_WORKSPACE_DOWN: - if (view->next != NULL) - { - HT_SetWorkspaceOrder(view, view->next, PR_TRUE); - } - break; -#ifdef SMART_MAIL - case HT_CMD_GET_NEW_MAIL: - PopGetNewMail(view->top->node); - break; -#endif - default: - node = HT_GetNextSelection(view, NULL); - do - { - switch(menuCmd) - { - case HT_CMD_OPEN: - if (node == NULL) break; - HT_GetOpenState(node, &openState); - error = HT_SetOpenState(node, !openState); - break; - - case HT_CMD_OPEN_NEW_WIN: - if (node == NULL) break; - - XP_MEMSET(&chrome, 0, sizeof(Chrome)); - chrome.show_button_bar = PR_TRUE; - chrome.show_url_bar = PR_TRUE; - chrome.show_directory_buttons = PR_TRUE; - chrome.show_bottom_status_bar = PR_TRUE; - chrome.show_menu = PR_TRUE; - chrome.show_security_bar = PR_TRUE; - chrome.allow_close = PR_TRUE; - chrome.allow_resize = PR_TRUE; - chrome.show_scrollbar = PR_TRUE; - - urls = NET_CreateURLStruct(resourceID(node->node), NET_DONT_RELOAD); - FE_MakeNewWindow((MWContext *)gRDFMWContext(NULL), urls, NULL, &chrome); - break; - - case HT_CMD_OPEN_COMPOSER: -#ifdef EDITOR - /* - XXX to do - - Composer needs to expose a routine similar - to FE_MakeNewWindow() for opening a URL in - an editor window - */ -#endif EDITOR - break; - - case HT_CMD_NEW_BOOKMARK: - case HT_CMD_NEW_FOLDER: - case HT_CMD_NEW_SEPARATOR: - uniqueCount = 0; - if (menuCmd == HT_CMD_NEW_BOOKMARK) - { - if ((url = FE_Prompt(((MWContext *)gRDFMWContext(NULL)), - "URL:", "http://")) == NULL) break; - - if (!strcmp(url, "about")) - { - XP_FREE(url); - url = PR_smprintf("http://people.netscape.com/rjc/about.rdf#root"); - doAbout = PR_TRUE; - menuCmd = HT_CMD_NEW_FOLDER; - } - /* for the moment, only allow direct addition of http URLs */ -/* - if (!startsWith("http://", url)) - { - XP_FREE(url); - url = NULL; - break; - } -*/ - gAutoEditNewNode = PR_TRUE; - } - else - do - { - if (menuCmd == HT_CMD_NEW_FOLDER) - { - url = PR_smprintf("container%s.rdf", - makeNewID()); - gAutoEditNewNode = PR_TRUE; - } - else if (menuCmd == HT_CMD_NEW_SEPARATOR) - { - url = PR_smprintf("separator%s", - makeNewID()); - } - rNode = RDF_GetResource(pane->db, url, PR_FALSE); - if (rNode != NULL) - { - if (url != NULL) - { - XP_FREE(url); - url = NULL; - } - } - } while (rNode != NULL); - - if ((rNode = RDF_GetResource(pane->db, url, PR_TRUE)) != NULL) - { - setResourceType (rNode, RDF_RT); - if (menuCmd == HT_CMD_NEW_BOOKMARK) - { - RDF_Assert(pane->db, rNode, - gCoreVocab->RDF_name, - XP_GetString(RDF_DATA_1), - RDF_STRING_TYPE); - htSetBookmarkAddDateToNow(rNode); - } - else if (menuCmd == HT_CMD_NEW_FOLDER) - { - setContainerp(rNode, PR_TRUE); - if (doAbout == PR_TRUE) - { - gAutoEditNewNode = PR_FALSE; - } - else - { - RDF_Assert(pane->db, rNode, - gCoreVocab->RDF_name, - XP_GetString(RDF_DATA_2), - RDF_STRING_TYPE); - } - htSetBookmarkAddDateToNow(rNode); - } - if (node != NULL) - { - if (HT_IsContainer(node)) - { - RDF_Assert(pane->db, rNode, - gCoreVocab->RDF_parent, - node->node, - RDF_RESOURCE_TYPE); - error = HT_SetOpenState(node, PR_TRUE); - } - else - { - RDF_Assert(pane->db, rNode, - gCoreVocab->RDF_parent, - node->parent->node, - RDF_RESOURCE_TYPE); - } - } - else - { - RDF_Assert(pane->db, rNode, - gCoreVocab->RDF_parent, - HT_TopNode(view)->node, - RDF_RESOURCE_TYPE); - } - - node = NULL; - } - if (url != NULL) - { - XP_FREE(url); - url = NULL; - } - break; - - case HT_CMD_ADD_TO_BOOKMARKS: - if (node == NULL) break; - HT_AddBookmark (resourceID(node->node), HT_GetNodeName(node)); - break; - - case HT_CMD_OPEN_AS_WORKSPACE: - if (node == NULL) break; - if (HT_IsContainer(node)) - { -#ifdef HT_PASSWORD_RTNS - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } -#endif - } - HT_NewWorkspace(pane, resourceID(node->node), NULL); - error = HT_NoErr; - break; - - case HT_CMD_FIND: - title = NULL; - if (node != NULL) - { - if (!HT_IsSeparator(node)) - { - title = HT_GetNodeName(node); - } - } - HT_Find(title); - break; - - case HT_CMD_REVEAL_FILEFOLDER: - if (node != NULL) - { - if (startsWith("file://", resourceID(node->node))) - { - RDF_Assert(node->view->pane->db, node->node, - gNavCenter->RDF_Command, - gNavCenter->RDF_Command_Reveal, - RDF_RESOURCE_TYPE); - } - } - break; - - case HT_CMD_PROPERTIES: - if (node == NULL) - { - node = HT_TopNode(view); - } - if (!HT_IsSeparator(node)) - { -#ifdef HT_PASSWORD_RTNS - if (HT_IsContainer(node)) - { - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } - } -#endif - HT_Properties(node); - } - error = HT_NoErr; - break; - - case HT_CMD_REFRESH: - if (node == NULL) - { - node = HT_TopNode(view); - } - if (HT_IsContainer(node)) - { - /* destroyViewInt(node, PR_TRUE); - RDF_Assert(node->view->pane->db, node->node, - gNavCenter->RDF_Command, gNavCenter->RDF_Command_Refresh, - RDF_RESOURCE_TYPE); - refreshItemList (node, HT_EVENT_VIEW_REFRESH); */ - RDF_Update(node->view->pane->db, node->node); - } - break; - - case HT_CMD_CUT: - if (node == NULL) break; - if (HT_IsContainer(node)) - { -#ifdef HT_PASSWORD_RTNS - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } -#endif - } - if (node->parent) - { - htCopyReference(node->node, gNavCenter->RDF_Clipboard, emptyClipboard); - emptyClipboard = PR_FALSE; - htRemoveChild(node->parent, node, PR_TRUE); - needRefresh = PR_TRUE; - } - break; - - case HT_CMD_COPY: - if (node == NULL) break; - htCopyReference(node->node, gNavCenter->RDF_Clipboard, emptyClipboard); - emptyClipboard = PR_FALSE; - break; - - case HT_CMD_PASTE: - if (node == NULL) break; - if (HT_IsContainer(node)) - { - htCopyReference(gNavCenter->RDF_Clipboard, node->node, PR_FALSE); - } - break; - - case HT_CMD_UNDO: - break; - - case HT_CMD_RENAME: - if (node == NULL) break; - sendNotification(node, HT_EVENT_NODE_SCROLLTO, - NULL, HT_COLUMN_UNKNOWN); - sendNotification(node, HT_EVENT_NODE_EDIT, - NULL, HT_COLUMN_UNKNOWN); - break; - - case HT_CMD_PRINT_FILE: - if (node == NULL) break; -#ifdef WIN32 - if ((resourceType(node->parent->node) == LFS_RT) && - (!HT_IsContainer(node))) - { - FE_Print(resourceID(node->node)); - } -#endif - break; - - case HT_CMD_DELETE_FILE: - if (node == NULL) break; - if (HT_IsContainer(node)) break; - if (htRemoveChild(node->parent, node, PR_FALSE)) - { - node = NULL; - break; - } - needRefresh = PR_TRUE; - break; - - case HT_CMD_DELETE_FOLDER: - if (node == NULL) break; - if (!HT_IsContainer(node)) break; - if (htRemoveChild(node->parent, node, PR_FALSE)) - { - node = NULL; - break; - } - needRefresh = PR_TRUE; - break; - - case HT_CMD_EXPORT: - if (node == NULL) - { - if (pane == NULL) break; - if (pane->selectedView == NULL) break; - node = HT_TopNode(pane->selectedView); - } - if (node == NULL) break; - if (HT_IsContainer(node)) - { -#ifdef HT_PASSWORD_RTNS - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } -#endif - FE_PromptForFileName(((MWContext *)gRDFMWContext(NULL)), - "", NULL, PR_FALSE, PR_FALSE, - (ReadFileNameCallbackFunction)exportCallback, - (void *)node->node); - } - break; - - case HT_CMD_EXPORTALL: - FE_PromptForFileName(((MWContext *)gRDFMWContext(NULL)), - NULL, NETSCAPE_RDF_FILENAME, PR_FALSE, PR_FALSE, - (ReadFileNameCallbackFunction)exportCallback, - (void *)gNavCenter->RDF_Top); - break; - - case HT_CMD_SET_TOOLBAR_FOLDER: - if (node == NULL) break; - if (HT_IsContainer(node)) - { -#ifdef HT_PASSWORD_RTNS - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } -#endif - if ((newTopNode = node->node) != NULL) - { - RDFUtil_SetPTFolder(newTopNode); - onlyUpdateBookmarks = PR_FALSE; - onlyUpdatePersonalToolbar = PR_TRUE; - needRefresh = PR_TRUE; - } - } - break; - - case HT_CMD_SET_BOOKMARK_MENU: - if (node == NULL) break; - if (HT_IsContainer(node)) - { -#ifdef HT_PASSWORD_RTNS - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_FALSE) == PR_FALSE) break; - } -#endif - if ((newTopNode = node->node) != NULL) - { - RDFUtil_SetQuickFileFolder(newTopNode); - onlyUpdateBookmarks = PR_TRUE; - onlyUpdatePersonalToolbar = (newTopNode == RDFUtil_GetPTFolder()) ? PR_TRUE:PR_FALSE; - needRefresh = PR_TRUE; - } - } - break; - - case HT_CMD_REMOVE_BOOKMARK_MENU: - if (node == NULL) break; - if ((topNode = HT_TopNode(view)) == NULL) break; - if ((newTopNode = topNode->node) != NULL) - { - RDFUtil_SetQuickFileFolder(newTopNode); - onlyUpdateBookmarks = PR_TRUE; - onlyUpdatePersonalToolbar = (newTopNode == RDFUtil_GetPTFolder()) ? PR_TRUE:PR_FALSE; - needRefresh = PR_TRUE; - } - break; - - case HT_CMD_SET_BOOKMARK_FOLDER: - if (node == NULL) break; - if (HT_IsContainer(node)) - { - if ((newTopNode = node->node) != NULL) - { - RDFUtil_SetNewBookmarkFolder(newTopNode); - onlyUpdateBookmarks = PR_TRUE; - onlyUpdatePersonalToolbar = PR_FALSE; - needRefresh = PR_TRUE; - } - } - break; - - case HT_CMD_REMOVE_BOOKMARK_FOLDER: - if (node == NULL) break; - if ((topNode = HT_TopNode(view)) == NULL) break; - if ((newTopNode = topNode->node) != NULL) - { - RDFUtil_SetNewBookmarkFolder(newTopNode); - onlyUpdateBookmarks = PR_TRUE; - onlyUpdatePersonalToolbar = PR_FALSE; - needRefresh = PR_TRUE; - } - break; - -#ifdef HT_PASSWORD_RTNS - - case HT_CMD_SET_PASSWORD: - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_TRUE) == PR_FALSE) break; - } - if ((password1 = FE_PromptPassword(((MWContext *)gRDFMWContext(NULL)), - XP_GetString(RDF_NEWPASSWORD))) == NULL) break; - if ((password2 = FE_PromptPassword(((MWContext *)gRDFMWContext(NULL)), - XP_GetString(RDF_CONFIRMPASSWORD))) == NULL) break; - if (strcmp(password1, password2)) - { - FE_Alert(((MWContext *)gRDFMWContext(NULL)), XP_GetString(RDF_MISMATCHPASSWORD)); - break; - } - ht_SetPassword(node, password1); - break; - - case HT_CMD_REMOVE_PASSWORD: - if (ht_hasPassword(node) == PR_TRUE) - { - if (ht_checkPassword(node, PR_TRUE) == PR_FALSE) break; - } - ht_SetPassword(node, NULL); - break; -#endif - - default: - if (node == NULL) break; - - /* handle commands from the RDF graph */ - if (menuCmd >= NUM_MENU_CMDS) - { - menuCommand = menuCommandsList; - while (menuCommand != NULL) - { - if (menuCommand->menuCmd == menuCmd) - { - RDF_Assert(gNCDB, node->node, gNavCenter->RDF_Command, - menuCommand->graphCommand, RDF_RESOURCE_TYPE); - needRefresh = PR_TRUE; - break; - } - menuCommand = menuCommand->next; - } - } - break; - } - if (node != NULL) - { - node = HT_GetNextSelection(view, node); - } - } while (node != NULL); - break; - } - - freeMenuCommandList(); - - if (needRefresh == PR_TRUE) - { - refreshPanes(onlyUpdateBookmarks, onlyUpdatePersonalToolbar, newTopNode); - } - gBatchUpdate = PR_FALSE; - - return(error); -#else - return(0); -#endif -} - - - -void -htEmptyClipboard(RDF_Resource parent) -{ - RDF_Cursor c; - RDF_Resource node; - - XP_ASSERT(parent != NULL); - - if (parent != NULL) - { - if ((c = RDF_GetSources(gNCDB, parent, gCoreVocab->RDF_parent, - RDF_RESOURCE_TYPE, PR_TRUE)) != NULL) - { - while ((node = RDF_NextValue(c)) != NULL) - { - RDF_Unassert(gNCDB, node, gCoreVocab->RDF_parent, - parent, RDF_RESOURCE_TYPE); - } - RDF_DisposeCursor(c); - } - } -} - - - -void -htCopyReference(RDF_Resource original, RDF_Resource newParent, PRBool empty) -{ - RDF_Cursor c; - RDF_Resource node; - - XP_ASSERT(original != NULL); - XP_ASSERT(newParent != NULL); - - if (empty == PR_TRUE) - { - htEmptyClipboard(newParent); - } - - if ((original != NULL) && (newParent != NULL)) - { - if (original == gNavCenter->RDF_Clipboard) - { - if ((c = RDF_GetSources(gNCDB, original, gCoreVocab->RDF_parent, - RDF_RESOURCE_TYPE, PR_TRUE)) != NULL) - { - while ((node = RDF_NextValue(c)) != NULL) - { - RDF_Assert(gNCDB, node, gCoreVocab->RDF_parent, - newParent, RDF_RESOURCE_TYPE); - } - RDF_DisposeCursor(c); - } - } - else - { - RDF_Assert(gNCDB, original, gCoreVocab->RDF_parent, - newParent, RDF_RESOURCE_TYPE); - } - } -} - - - -PR_PUBLIC_API(HT_Resource) -HT_GetNthItem (HT_View view, uint32 theIndex) -{ - uint32 count = theIndex; - ldiv_t cdiv = ldiv(count , ITEM_LIST_ELEMENT_SIZE); - uint32 bucketNum = (uint32)cdiv.quot; - uint32 offset = (uint32)cdiv.rem; - if (theIndex >= view->itemListCount) return NULL; - if (*(view->itemList + bucketNum) == NULL) return NULL; - return *((*(view->itemList + bucketNum)) + offset); -} - - - -PR_PUBLIC_API(uint32) -HT_GetNodeIndex(HT_View view, HT_Resource node) -{ - uint32 itemListIndex = 0; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - itemListIndex = node->itemListIndex; - } - return(itemListIndex); -} - - - -PR_PUBLIC_API(uint32) -HT_GetViewIndex(HT_View view) -{ - HT_View viewList = NULL; - uint32 viewListIndex = 0; - - XP_ASSERT(view != NULL); - - if (view != NULL) - { - viewList = (view->pane->viewList); - while (viewList != NULL) - { - if (viewList == view) break; - ++viewListIndex; - viewList = viewList->next; - } - } - if (viewList != view) viewListIndex = 0; - return(viewListIndex); -} - - - -PR_PUBLIC_API(PRBool) -HT_ItemHasForwardSibling(HT_Resource r) -{ - XP_ASSERT(r != NULL); - - return ((r != NULL) && (r->next) ? PR_TRUE : PR_FALSE); -} - - - -PR_PUBLIC_API(PRBool) -HT_ItemHasBackwardSibling(HT_Resource r) -{ - PRBool flag = PR_FALSE; - - XP_ASSERT(r != NULL); - - if ((r != NULL) && r->parent && (r->parent->child != r)) - { - flag = PR_TRUE; - } - return (flag); -} - - - -PR_PUBLIC_API(uint16) -HT_GetItemIndentation (HT_Resource r) -{ - uint16 depth = 0; - - XP_ASSERT(r != NULL); - - if (r != NULL) - { - depth = r->depth; - } - return (depth); -} - - - -PR_PUBLIC_API(uint32) -HT_GetItemListCount (HT_View v) -{ - uint32 count = 0; - - XP_ASSERT(v != NULL); - - if (v != NULL) - { - count = v->itemListCount; - } - return (count); -} - - - -PR_PUBLIC_API(uint32) -HT_GetViewListCount (HT_Pane p) -{ - uint32 count = 0; - - XP_ASSERT(p != NULL); - - if (p != NULL) - { - count = p->viewListCount; - } - return (count); -} - - - -PR_PUBLIC_API(HT_View) -HT_GetNthView (HT_Pane pane, uint32 theIndex) -{ - HT_View view = NULL; - - XP_ASSERT(pane != NULL); - - if (pane != NULL) - { - view = pane->viewList; - while ((theIndex > 0) && (view != NULL)) - { - view = view->next; - --theIndex; - } - } - return(view); -} - - - -PR_PUBLIC_API(HT_Resource) -HT_GetParent (HT_Resource node) -{ - XP_ASSERT(node != NULL); - - if (!node) return NULL; - return (node->parent); -} - - - -PR_PUBLIC_API(HT_View) -HT_GetView (HT_Resource node) -{ - HT_View view = NULL; - - if (node != NULL) - { - view = node->view; - } - return (view); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsEnabled (HT_Resource node) -{ - PRBool isSelected = PR_FALSE; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if (node->flags & HT_ENABLED_FLAG) isSelected = PR_TRUE; - } - return (isSelected); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsSelected (HT_Resource node) -{ - PRBool isSelected = PR_FALSE; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if (node->flags & HT_SELECTED_FLAG) isSelected = PR_TRUE; - } - return (isSelected); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsContainer (HT_Resource node) -{ - PRBool isContainer = PR_FALSE; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if (containerp(node->node)) isContainer = PR_TRUE; - } - return (isContainer); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsContainerOpen (HT_Resource node) -{ - PRBool isOpen = PR_FALSE; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if ((node->flags & HT_OPEN_FLAG) || - (node->flags & HT_AUTOFLUSH_OPEN_FLAG)) isOpen = PR_TRUE; - } - return (isOpen); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsURLBar(HT_Resource node) -{ - char *data; - PRBool retVal = PR_FALSE; - - HT_GetNodeData(node, gNavCenter->urlBar, HT_COLUMN_STRING, (void **)&data); - if ((data != NULL) && (data[0] == 'Y' || data[0] == 'y')) - { - retVal = PR_TRUE; - } - return(retVal); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsSeparator (HT_Resource node) -{ - PRBool isSep = PR_FALSE; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - if ((node != NULL) && (node->node != NULL)) - { - if (isSeparator(node->node)) isSep = PR_TRUE; - } - return(isSep); -} - - - -PRBool -ht_isURLReal(HT_Resource node) -{ - RDF_BT type; - PRBool validFlag = PR_TRUE; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - type = resourceType(node->node); -/* - if (type == LFS_RT) - { - validFlag = PR_FALSE; - } - else -*/ - if (HT_IsContainer(node)) - { - if (type == RDF_RT || type == HISTORY_RT || type == SEARCH_RT || - type == PM_RT || type == IM_RT || type == ATALKVIRTUAL_RT) - { - validFlag = PR_FALSE; - } - } - else if (HT_IsSeparator(node)) - { - validFlag = PR_FALSE; - } - return(validFlag); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_GetTemplate(int templateType) -{ - XP_ASSERT(templateType == ht_template_chrome || - templateType == ht_template_management || - templateType == ht_template_navigation); - switch(templateType) { - case ht_template_chrome : - return gChromeTemplate; - case ht_template_management : - return gManagementTemplate; - case ht_template_navigation : - return gNavigationTemplate; - default : - return 0; - } -} - - - -PR_PUBLIC_API(PRBool) -HT_GetTemplateData(HT_Resource node, void* token, uint32 tokenType, void **nodeData) -{ - void* data = NULL; - HT_Pane thePane = NULL; - HT_Pane templatePane = NULL; - - if (HT_GetNodeData(node, token, tokenType, nodeData)) - return PR_TRUE; - - /* Use the template instead */ - thePane = HT_GetPane(HT_GetView(node)); - - /* Figure out which template to use based on the current window state of this view. */ - if (thePane->toolbar) - return HT_GetNodeData(HT_TopNode(HT_GetSelectedView(gChromeTemplate)), - token, tokenType, nodeData); - else if (thePane->templateType != NULL) - { - /* Make sure we have a valid template to use. */ - if (templatePane == NULL) - templatePane = newTemplatePane(thePane->templateType); - - return HT_GetNodeData(HT_TopNode(HT_GetSelectedView(templatePane)), - token, tokenType, nodeData); - } - else if (thePane->windowType == HT_STANDALONE_WINDOW) - return HT_GetNodeData(HT_TopNode(HT_GetSelectedView(gManagementTemplate)), - token, tokenType, nodeData); - else - return HT_GetNodeData(HT_TopNode(HT_GetSelectedView(gNavigationTemplate)), - token, tokenType, nodeData); -} - - - -PR_PUBLIC_API(PRBool) -HT_GetNodeData (HT_Resource node, void *token, uint32 tokenType, void **nodeData) -{ - HT_Value values; - PRBool foundData = PR_FALSE; - void *data = NULL; - - XP_ASSERT(node != NULL); - - if (token != NULL && nodeData != NULL) - { - *nodeData = NULL; - - if ((values = node->values) != NULL) - { - while (values != NULL) - { - if ((values->tokenType == tokenType) && - (values->token == token)) - { - *nodeData = values->data; - return(PR_TRUE); - } - values = values->next; - } - } - - if ((token == gWebData->RDF_URL) && (ht_isURLReal(node) == PR_FALSE)) - { - /* don't return RDF container or separator URLs */ - } - else if (tokenType == HT_COLUMN_INT || tokenType == HT_COLUMN_DATE_INT) - { - data = RDF_GetSlotValue(node->view->pane->db, node->node, token, - RDF_INT_TYPE, PR_FALSE, PR_TRUE); - foundData = PR_TRUE; - } - else if (tokenType == HT_COLUMN_STRING || tokenType == HT_COLUMN_DATE_STRING || tokenType == 0) - { - if (token == gWebData->RDF_URL) - { - data = copyString(resourceID(node->node)); - } - else - { - data = RDF_GetSlotValue(node->view->pane->db, node->node, - token, RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - } - if (data != NULL) - { - foundData = PR_TRUE; - } - } - - if ((foundData == PR_TRUE) && ((values = (HT_Value)getMem(sizeof(HT_ValueStruct))) != NULL)) - { - values->tokenType = tokenType; - values->token = token; - values->data = data; - - values->next = node->values; - node->values = values; - } - *nodeData = data; - } - return(foundData); -} - - - -PRBool -htVerifyUniqueToken(HT_Resource node, void *token, uint32 tokenType, char *data) -{ - RDF_Cursor c; - RDF_Resource r; - char *msg; - PRBool ok = PR_FALSE; - -#ifndef HT_RAPTOR - - XP_ASSERT(node != NULL); - if (node == NULL) return(PR_FALSE); - XP_ASSERT(token != NULL); - if (token == NULL) return(PR_FALSE); - XP_ASSERT(data != NULL); - if (data == NULL) return(PR_FALSE); - - if ((c = RDF_Find(gNavCenter->RDF_URLShortcut, gCoreVocab->RDF_stringEquals, - data, RDF_STRING_TYPE)) != NULL) - { - if ((r = RDF_NextValue(c)) == NULL) - { - ok = PR_TRUE; - } - else if (node->node == r) - { - ok = PR_TRUE; - } - else - { - msg = PR_smprintf(XP_GetString(RDF_SHORTCUT_CONFLICT_STR), - data, resourceID(r)); - if (msg != NULL) - { - ok = FE_Confirm(((MWContext *)gRDFMWContext(NULL)), msg); - XP_FREE(msg); - } - } - RDF_DisposeCursor(c); - } -#endif - return(ok); -} - - -PR_PUBLIC_API(HT_Error) -HT_SetNodeData (HT_Resource node, void *token, uint32 tokenType, void *data) -{ - HT_Error error = HT_Err; - void *oldData = NULL; - PRBool dirty = PR_TRUE; - char *temp; - - XP_ASSERT(node != NULL); - XP_ASSERT(token != NULL); - - if (HT_IsNodeDataEditable(node, token, tokenType)) - { - HT_GetNodeData(node, token, tokenType, &oldData); - switch(tokenType) - { - case HT_COLUMN_STRING: - if ((token == gNavCenter->RDF_URLShortcut) && (data != NULL) && - ((*(char *)data) != '\0')) - { - dirty = htVerifyUniqueToken(node, token, - tokenType, (char *)data); - } - else if (data != NULL && oldData != NULL) - { - if (!strcmp(data, oldData)) - { - dirty = PR_FALSE; - } - } - if (dirty == PR_TRUE) - { - if (oldData != NULL) - { - temp = copyString(oldData); - if (temp != NULL) - { - RDF_Unassert(node->view->pane->db, node->node, - token, temp, RDF_STRING_TYPE); - freeMem(temp); - } - } - if ((data != NULL) && (((char *)data)[0] != '\0')) - { - RDF_Assert(node->view->pane->db, node->node, - token, data, RDF_STRING_TYPE); - } - if (token == gNavCenter->RDF_smallIcon || - token == gNavCenter->RDF_largeIcon) - { - if (node->flags & HT_FREEICON_URL_FLAG) - { - if (node->url[0] != NULL) - { - freeMem(node->url[0]); - node->url[0] = NULL; - } - if (node->url[1] != NULL) - { - freeMem(node->url[1]); - node->url[1] = NULL; - } - if (node->url[2] != NULL) - { - freeMem(node->url[2]); - node->url[2] = NULL; - } - if (node->url[3] != NULL) - { - freeMem(node->url[3]); - node->url[3] = NULL; - } - if (node->url[4] != NULL) - { - freeMem(node->url[4]); - node->url[4] = NULL; - } - } - } - } - error = HT_NoErr; - break; - } - } - return(error); -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetNodeName(HT_Resource node, void *data) -{ - XP_ASSERT(node != NULL); - - return(HT_SetNodeData(node, gCoreVocab->RDF_name, HT_COLUMN_STRING, data)); -} - - - -PR_PUBLIC_API(PRBool) -HT_IsNodeDataEditable(HT_Resource node, void *token, uint32 tokenType) -{ - RDF_BT type; - PRBool canEditFlag = PR_FALSE; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - XP_ASSERT(token != NULL); - - if (!HT_IsSeparator(node)) - { - if (node->parent != NULL) - { - type = resourceType(node->parent->node); - } - else - { - type = resourceType(node->node); - } - - if (((token == gCoreVocab->RDF_name) && (!htIsOpLocked(node, gNavCenter->RDF_NameLock))) || - ((token == gNavCenter->RDF_largeIcon) && (!htIsOpLocked(node, gNavCenter->RDF_IconLock))) || - ((token == gNavCenter->RDF_smallIcon) && (!htIsOpLocked(node, gNavCenter->RDF_IconLock))) || - (token == gWebData->RDF_description) || (token == gWebData->RDF_keyword) || - (token == gNavCenter->RDF_URLShortcut) || - (token == gNavCenter->RDF_HTMLURL) || (token == gNavCenter->RDF_HTMLHeight) || - (token == gNavCenter->viewFGColor) || (token == gNavCenter->viewBGColor) || - (token == gNavCenter->viewBGURL) || (token == gNavCenter->showTreeConnections) || - (token == gNavCenter->treeConnectionFGColor) || (token == gNavCenter->treeOpenTriggerIconURL) || - (token == gNavCenter->treeClosedTriggerIconURL) || (token == gNavCenter->selectionFGColor) || - (token == gNavCenter->selectionBGColor) || (token == gNavCenter->columnHeaderFGColor) || - (token == gNavCenter->columnHeaderBGColor) || (token == gNavCenter->columnHeaderBGURL) || - (token == gNavCenter->showColumnHeaders) || (token == gNavCenter->showColumnHeaderDividers) || - (token == gNavCenter->sortColumnFGColor) || (token == gNavCenter->sortColumnBGColor) || - (token == gNavCenter->titleBarFGColor) || (token == gNavCenter->titleBarBGColor) || - (token == gNavCenter->titleBarBGURL) || (token == gNavCenter->dividerColor) || - (token == gNavCenter->showDivider) || (token == gNavCenter->selectedColumnHeaderFGColor) || - (token == gNavCenter->selectedColumnHeaderBGColor) || (token == gNavCenter->showColumnHilite) || - (token == gNavCenter->triggerPlacement) || - (token == gNavCenter->viewRolloverColor) || - (token == gNavCenter->viewPressedColor) || (token == gNavCenter->viewDisabledColor) || - (token == gNavCenter->toolbarBitmapPosition) || (token == gNavCenter->toolbarButtonsFixedSize) || - (token == gNavCenter->toolbarDisplayMode) || - (token == gNavCenter->toolbarCollapsed) || (token == gNavCenter->toolbarVisible) || - (token == gNavCenter->toolbarDisabledIcon) || (token == gNavCenter->toolbarEnabledIcon) || - (token == gNavCenter->toolbarRolloverIcon) || (token == gNavCenter->toolbarPressedIcon) || - (token == gNavCenter->buttonTooltipText) || (token == gNavCenter->buttonStatusbarText) || - (token == gNavCenter->urlBar) || (token == gNavCenter->urlBarWidth) || - (token == gNavCenter->buttonTreeState) || (token == gNavCenter->buttonBorderStyle) || - (token == gNavCenter->useInlineEditing) || (token == gNavCenter->useSingleClick) || - (token == gNavCenter->loadOpenState) || (token == gNavCenter->saveOpenState) || - (token == gNavCenter->controlStripFGColor) || - (token == gNavCenter->controlStripBGColor) || (token == gNavCenter->controlStripBGURL) || - (token == gNavCenter->controlStripCloseText) || - (token == gNavCenter->titleBarShowText) || (token == gNavCenter->showTitleBar) || - (token == gNavCenter->showControlStrip) || - /* ((token == gWebData->RDF_URL) && ht_isURLReal(node)) || */ -#ifdef HT_PASSWORD_RTNS - (token == gNavCenter->RDF_Password) || -#endif - ((gMissionControlEnabled == PR_TRUE) && - ((token == gNavCenter->RDF_AddLock) || - (token == gNavCenter->RDF_DeleteLock) || - (token == gNavCenter->RDF_IconLock) || - (token == gNavCenter->RDF_NameLock) || - (token == gNavCenter->RDF_CopyLock) || - (token == gNavCenter->RDF_MoveLock) || - (token == gNavCenter->RDF_WorkspacePosLock)))) - { - if (tokenType == HT_COLUMN_STRING) - { - if (type == RDF_RT) - { - canEditFlag = PR_TRUE; - } - else if (type == LFS_RT) - { - if (node->node == gNavCenter->RDF_LocalFiles) - { - canEditFlag = PR_TRUE; - } - } - else if (type == HISTORY_RT) - { - if (node->parent == NULL) - { - canEditFlag = PR_TRUE; - } - } - } - } - } - return(canEditFlag); -} - -PR_PUBLIC_API(int) -HT_GetTreeStateForButton(HT_Resource node) -{ - char* answer = NULL; - - if (HT_GetTemplateData(node, gNavCenter->buttonTreeState, HT_COLUMN_STRING, &answer)) - { - if (!XP_STRCASECMP(answer, "Docked")) - return HT_DOCKED_WINDOW; - } - - return HT_POPUP_WINDOW; -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetTreeStateForButton(HT_Resource node, int state) -{ - HT_Resource nodeToModify; - void* data; - - /* Query this node for its current state. */ - if (HT_GetNodeData(node, gNavCenter->buttonTreeState, HT_COLUMN_STRING, &data)) - nodeToModify = node; - else nodeToModify = HT_TopNode(HT_GetSelectedView(gChromeTemplate)); - - if (state == HT_DOCKED_WINDOW) - return HT_SetNodeData(nodeToModify, gNavCenter->buttonTreeState, HT_COLUMN_STRING, - "Docked"); - else if (state == HT_POPUP_WINDOW) - return HT_SetNodeData(nodeToModify, gNavCenter->buttonTreeState, HT_COLUMN_STRING, - "Popup"); - - return HT_NoErr; -} - - - -PR_PUBLIC_API(int) -HT_GetWindowType(HT_Pane pane) -{ - return pane->windowType; -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetWindowType(HT_Pane pane, int windowType) -{ - XP_ASSERT(pane != NULL); - XP_ASSERT(pane->selectedView != NULL); - - pane->windowType = windowType; - sendNotification(HT_TopNode(pane->selectedView), HT_EVENT_VIEW_MODECHANGED, - NULL, HT_COLUMN_UNKNOWN); - return HT_NoErr; -} - - - -/* XXX HT_NodeDisplayString is obsolete! Don't use. */ - -#ifndef HT_RAPTOR -PR_PUBLIC_API(HT_Error) -HT_NodeDisplayString (HT_Resource node, char *buffer, int bufferLen) -{ - char *name = HT_GetNodeName(node); - memset(buffer, '\0', bufferLen); - if (name != NULL) - { - if (strlen(name) < (unsigned)bufferLen) - { - strcpy(buffer, name); - } - else - { - strncpy(buffer, name, bufferLen-2); - name[bufferLen-1]='\0'; - } - } - XP_ASSERT( IsUTF8String(buffer)); - return HT_NoErr; -} -#endif - - - -/* XXX HT_ViewDisplayString is obsolete! Don't use. */ - -#ifndef HT_RAPTOR -PR_PUBLIC_API(HT_Error) -HT_ViewDisplayString (HT_View view, char *buffer, int bufferLen) -{ - char *name = HT_GetViewName(view); - memset(buffer, '\0', bufferLen); - if (name != NULL) - { - if (strlen(name) < (unsigned)bufferLen) - { - strcpy(buffer, name); - } - else - { - strncpy(buffer, name, bufferLen-2); - name[bufferLen-1]='\0'; - } - } - XP_ASSERT( IsUTF8String(buffer)); - return HT_NoErr; -} -#endif - - - -char * -buildInternalIconURL(HT_Resource node, PRBool *volatileURLFlag, - PRBool largeIconFlag, PRBool workspaceFlag) -{ - HT_Icon theURL, *urlEntry; - RDF_BT targetType; - char buffer[128], *object="", *objectType="", *objectInfo="", *objectState=""; - - XP_ASSERT(node != NULL); - XP_ASSERT(volatileURLFlag != NULL); - - *volatileURLFlag = PR_FALSE; - targetType = resourceType(node->node); - /* if (targetType == ES_RT) targetType = LFS_RT; */ - if (HT_IsContainer(node)) - { - if (workspaceFlag) - { - object = "workspace"; - if (node->node == gNavCenter->RDF_Sitemaps) - { - objectType = ",sitemap"; - } -/* - else if (node->node == gNavCenter->RDF_Channels) - { - objectType = ",channels"; - } -*/ - else if (targetType == LDAP_RT) - { - objectType = ",ldap"; - } - else if (targetType == LFS_RT) - { - objectType = ",file"; - } - else - { - objectType = ",personal"; - } - } - else - { - object = "folder"; - - /* URL is state-based, so may change */ - *volatileURLFlag = PR_TRUE; - - if (targetType == LFS_RT) - { - objectInfo = (HT_IsContainerOpen(node)) ? "/local,open" : "/local,closed"; - } - else if (targetType == FTP_RT || targetType == ES_RT || - targetType == LDAP_RT) - { - objectInfo = (HT_IsContainerOpen(node)) ? "/remote,open" : "/remote,closed"; - } - else - { - objectInfo = (HT_IsContainerOpen(node)) ? "/open" : "/closed"; - } - } - } - else - { - *volatileURLFlag = PR_FALSE; - - if (targetType == LFS_RT) - { - object = "file"; - objectInfo = "/local"; - } - else if (targetType == FTP_RT || targetType == ES_RT) - { - object = "file"; - objectInfo = "/remote"; - } - else - { - object = "url"; - if (HT_IsSeparator(node)) - { - object = "url/separator"; - } - else if ((node->node != NULL) && ( resourceID(node->node) != NULL)) - { - if (startsWith("file:", resourceID(node->node))) - { - object = "file/local"; - } - else if (startsWith("mailbox:", resourceID(node->node))) - { - object = "mailbox"; - } - else if (startsWith("mail:", resourceID(node->node))) - { - object = "mail"; - } - else if (startsWith("news:", resourceID(node->node))) - { - object = "news"; - } - } - } - } - - switch(targetType) - { - case FTP_RT: objectType=",ftp"; break; - case ES_RT: objectType=",server"; break; - case SEARCH_RT: objectType=",search"; break; - case HISTORY_RT: objectType=",history"; break; - case LDAP_RT: objectType=",ldap"; break; -/* - case SITEMAP_RT: objectType=",sitemap"; break; - -*/ - default: - if (object[0] == '\0') - { - object="unknown"; - objectInfo=""; - objectType=""; - } - break; - } - - sprintf(buffer,"icon/%s:%s%s%s", ((largeIconFlag) ? "large":"small"), - object, objectType, objectInfo); - - /* maintain a cache of icon types so that a lot of memory isn't wasted - * giving each node its own copy of a relatively small number of types - */ - - urlEntry = &urlList; - while (*urlEntry != NULL) - { - if ((*urlEntry)->name) - { - if (!strcmp((*urlEntry)->name, buffer)) - { - return((*urlEntry)->name); - } - } - urlEntry = &((*urlEntry)->next); - } - if ((theURL = (HT_Icon)getMem(sizeof(_HT_Icon))) != NULL) - { - if ((theURL->name = copyString(buffer)) != NULL) - { - theURL->next = urlList; - urlList = theURL; - return(theURL->name); - } - freeMem(theURL); - } - return(NULL); -} - - - -char * -getIconURL( HT_Resource node, PRBool toolbarIconFlag, PRBool workspaceFlag, int state) -{ - - RDF_Resource res; - PRBool volatileURLFlag; - int iconIndex; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - iconIndex = 0; - if (toolbarIconFlag) - iconIndex = state; - - switch (iconIndex) - { - case 0: - res = gNavCenter->RDF_smallIcon; - break; - case 1: - res = gNavCenter->toolbarEnabledIcon; - break; - case 2: - res = gNavCenter->toolbarDisabledIcon; - break; - case 3: - res = gNavCenter->toolbarRolloverIcon; - break; - case 4: - res = gNavCenter->toolbarPressedIcon; - break; - } - - /* if volatile URL, flush if needed and re-create */ - - if (node->flags & HT_VOLATILE_URL_FLAG) - { - node->url[0] = NULL; - node->url[1] = NULL; - node->url[2] = NULL; - node->url[3] = NULL; - node->url[4] = NULL; - } - - if (node->url[iconIndex] == NULL) - { - if ((node->url[iconIndex] = (char*)RDF_GetSlotValue(node->view->pane->db, - node->node, res, RDF_STRING_TYPE, PR_FALSE, PR_TRUE)) != NULL) - { - node->flags &= (~HT_VOLATILE_URL_FLAG); - node->flags |= HT_FREEICON_URL_FLAG; - } - else - { - node->url[iconIndex] = buildInternalIconURL(node, - &volatileURLFlag, PR_FALSE, workspaceFlag); - if (volatileURLFlag) - { - node->flags |= HT_VOLATILE_URL_FLAG; - } - else - { - node->flags &= (~HT_VOLATILE_URL_FLAG); - } - } - } - return(node->url[iconIndex]); -} - - - -PR_PUBLIC_API(char *) -HT_GetIconURL(HT_Resource r, PRBool isToolbarIcon, PRBool isWorkspace, int toolbarState) -{ - return getIconURL(r, isToolbarIcon, isWorkspace, toolbarState); -} - - - -PR_PUBLIC_API(char *) -HT_GetNodeLargeIconURL (HT_Resource r) -{ - return (getIconURL( r, PR_FALSE, PR_FALSE, 0)); -} - - - -PR_PUBLIC_API(char *) -HT_GetNodeSmallIconURL (HT_Resource r) -{ - return (getIconURL( r, PR_FALSE, PR_FALSE, 0)); -} - - - -PR_PUBLIC_API(char *) -HT_GetWorkspaceLargeIconURL (HT_View view) -{ - XP_ASSERT(view != NULL); - - return (getIconURL( view->top, PR_FALSE, PR_TRUE, 0)); -} - - - -PR_PUBLIC_API(char *) -HT_GetWorkspaceSmallIconURL (HT_View view) -{ - XP_ASSERT(view != NULL); - - return (getIconURL( view->top, PR_FALSE, PR_TRUE, 0)); -} - - - -/* obsolete! */ -PR_PUBLIC_API(char *) -HT_GetLargeIconURL (HT_Resource r) -{ - return(NULL); -} - - - -/* obsolete! */ -PR_PUBLIC_API(char *) -HT_GetSmallIconURL (HT_Resource r) -{ - return(NULL); -} - - - -PRBool -htIsPropertyInMoreOptions(RDF_Resource r) -{ - PRBool retVal = PR_FALSE; - - if ((r == gNavCenter->viewFGColor) || (r == gNavCenter->viewBGColor) || - (r == gNavCenter->viewBGURL) || (r == gNavCenter->showTreeConnections) || - (r == gNavCenter->treeConnectionFGColor) || (r == gNavCenter->treeOpenTriggerIconURL) || - (r == gNavCenter->treeClosedTriggerIconURL) || (r == gNavCenter->selectionFGColor) || - (r == gNavCenter->selectionBGColor) || (r == gNavCenter->columnHeaderFGColor) || - (r == gNavCenter->columnHeaderBGColor) || (r == gNavCenter->columnHeaderBGURL) || - (r == gNavCenter->showColumnHeaders) || (r == gNavCenter->showColumnHeaderDividers) || - (r == gNavCenter->sortColumnFGColor) || (r == gNavCenter->sortColumnBGColor) || - (r == gNavCenter->titleBarFGColor) || (r == gNavCenter->titleBarBGColor) || - (r == gNavCenter->titleBarBGURL) || (r == gNavCenter->dividerColor) || - (r == gNavCenter->showDivider) || (r == gNavCenter->selectedColumnHeaderFGColor) || - (r == gNavCenter->selectedColumnHeaderBGColor) || (r == gNavCenter->showColumnHilite) || - (r == gNavCenter->triggerPlacement) || (r == gNavCenter->viewRolloverColor) || - (r == gNavCenter->viewPressedColor) || (r == gNavCenter->viewDisabledColor) || - (r == gNavCenter->toolbarBitmapPosition) || (r == gNavCenter->toolbarButtonsFixedSize) || - (r == gNavCenter->toolbarDisplayMode) || - (r == gNavCenter->toolbarCollapsed) || (r == gNavCenter->toolbarVisible) || - (r == gNavCenter->toolbarDisabledIcon) || (r == gNavCenter->toolbarEnabledIcon) || - (r == gNavCenter->toolbarRolloverIcon) || (r == gNavCenter->toolbarPressedIcon) || - (r == gNavCenter->buttonTooltipText) || (r == gNavCenter->buttonStatusbarText) || - (r == gNavCenter->urlBar) || (r == gNavCenter->urlBarWidth) || - (r == gNavCenter->buttonTreeState) || (r == gNavCenter->buttonBorderStyle) || - (r == gNavCenter->useInlineEditing) || (r == gNavCenter->useSingleClick) || - (r == gNavCenter->loadOpenState) || (r == gNavCenter->saveOpenState) || - (r == gNavCenter->controlStripFGColor) || - (r == gNavCenter->controlStripBGColor) || (r == gNavCenter->controlStripBGURL) || - (r == gNavCenter->controlStripCloseText) || - (r == gNavCenter->titleBarShowText) || (r == gNavCenter->showTitleBar) || - (r == gNavCenter->showControlStrip)) - - { - retVal = PR_TRUE; - } - return(retVal); -} - - - -#ifndef HT_RAPTOR -static PRBool -rdfColorProcDialogHandler(XPDialogState *dlgstate, char **argv, int argc, unsigned int button) -{ - PRBool dirty, retVal = PR_TRUE; - _htmlElementPtr htmlElement; - void *data = NULL; - int loop; - - switch(button) - { - case XP_DIALOG_OK_BUTTON: - for (loop=0; looptoken), argv[loop])) - { - htmlElement = htmlElement->next; - continue; - } - if (HT_IsNodeDataEditable(htmlElement->node, - htmlElement->token, htmlElement->tokenType)) - { - HT_GetNodeData (htmlElement->node, - htmlElement->token, - htmlElement->tokenType, &data); - - dirty = PR_FALSE; - switch(htmlElement->tokenType) - { - case HT_COLUMN_STRING: - if (data == NULL) - { - if (argv[loop+1][0] != '\0') - { - dirty = PR_TRUE; - } - } - else if (strcmp(data,argv[loop+1])) - { - dirty = PR_TRUE; - } - break; - } - if (dirty == PR_TRUE) - { - HT_SetNodeData (htmlElement->node, - htmlElement->token, - htmlElement->tokenType, - argv[loop+1]); - } - } - break; - } - } - retVal = PR_FALSE; - break; - - case XP_DIALOG_CANCEL_BUTTON: - retVal = PR_FALSE; - break; - } - - if (retVal == PR_FALSE) - { - freeHtmlElement(gNavCenter->viewFGColor); - freeHtmlElement(gNavCenter->viewBGColor); - freeHtmlElement(gNavCenter->viewBGURL); - freeHtmlElement(gNavCenter->showTreeConnections); - freeHtmlElement(gNavCenter->treeConnectionFGColor); - freeHtmlElement(gNavCenter->treeOpenTriggerIconURL); - freeHtmlElement(gNavCenter->treeClosedTriggerIconURL); - freeHtmlElement(gNavCenter->selectionFGColor); - freeHtmlElement(gNavCenter->selectionBGColor); - freeHtmlElement(gNavCenter->columnHeaderFGColor); - freeHtmlElement(gNavCenter->columnHeaderBGColor); - freeHtmlElement(gNavCenter->columnHeaderBGURL); - freeHtmlElement(gNavCenter->showColumnHeaders); - freeHtmlElement(gNavCenter->showColumnHeaderDividers); - freeHtmlElement(gNavCenter->sortColumnFGColor); - freeHtmlElement(gNavCenter->sortColumnBGColor); - freeHtmlElement(gNavCenter->titleBarFGColor); - freeHtmlElement(gNavCenter->titleBarBGColor); - freeHtmlElement(gNavCenter->titleBarBGURL); - freeHtmlElement(gNavCenter->dividerColor); - freeHtmlElement(gNavCenter->showDivider); - freeHtmlElement(gNavCenter->selectedColumnHeaderFGColor); - freeHtmlElement(gNavCenter->selectedColumnHeaderBGColor); - freeHtmlElement(gNavCenter->showColumnHilite); - freeHtmlElement(gNavCenter->triggerPlacement); - } - - return(retVal); -} -#endif - - - -#ifndef HT_RAPTOR -static XPDialogInfo rdfColorPropDialogInfo = { - (XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON), - rdfColorProcDialogHandler, - 500, 400 -}; -#endif - - - -#ifndef HT_RAPTOR -static PRBool -rdfProcDialogHandler(XPDialogState *dlgstate, char **argv, int argc, unsigned int button) -{ - HT_Resource node = NULL; - PRBool dirty, retVal = PR_TRUE; - XPDialogStrings *strings = NULL; - _htmlElementPtr htmlElement; - int loop; - void *data = NULL; - char *dynStr = NULL, *preHTMLdynStr = NULL, *postHTMLdynStr = NULL; - PRInt32 val; - - switch(button) - { - case XP_DIALOG_OK_BUTTON: - if (htmlElementList == NULL) - { - retVal = PR_FALSE; - break; - } - node = htmlElementList->node; - - if (gMissionControlEnabled == PR_TRUE) - { - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_AddLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_DeleteLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_IconLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_NameLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_CopyLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_MoveLock, - RDF_RESOURCE_TYPE); - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Locks, gNavCenter->RDF_WorkspacePosLock, - RDF_RESOURCE_TYPE); - } - for (loop=0; looptoken), argv[loop])) - { - htmlElement = htmlElement->next; - continue; - } - - if ((gMissionControlEnabled == PR_TRUE) && - ((htmlElement->token == gNavCenter->RDF_AddLock) || - (htmlElement->token == gNavCenter->RDF_DeleteLock) || - (htmlElement->token == gNavCenter->RDF_IconLock) || - (htmlElement->token == gNavCenter->RDF_NameLock) || - (htmlElement->token == gNavCenter->RDF_CopyLock) || - (htmlElement->token == gNavCenter->RDF_MoveLock) || - (htmlElement->token == gNavCenter->RDF_WorkspacePosLock))) - { - RDF_Assert(htmlElement->node->view->pane->db, - node->node, gNavCenter->RDF_Locks, - htmlElement->token, RDF_RESOURCE_TYPE); - } - else if (HT_IsNodeDataEditable(htmlElement->node, - htmlElement->token, htmlElement->tokenType)) - { - HT_GetNodeData (htmlElement->node, - htmlElement->token, - htmlElement->tokenType, &data); - - dirty = PR_FALSE; - switch(htmlElement->tokenType) - { - case HT_COLUMN_STRING: - if (data == NULL) - { - if (argv[loop+1][0] != '\0') - { - dirty = PR_TRUE; - } - } - else if (strcmp(data,argv[loop+1])) - { - dirty = PR_TRUE; - } - if (dirty == PR_TRUE) - { - HT_SetNodeData (htmlElement->node, - htmlElement->token, - htmlElement->tokenType, - argv[loop+1]); - } - break; - - case HT_COLUMN_INT: - val = atol(argv[loop+1]); - if (dirty == PR_TRUE) - { - HT_SetNodeData (htmlElement->node, - htmlElement->token, - htmlElement->tokenType, - &val); - } - break; - - } - } - break; - } - } - retVal = PR_FALSE; - break; - - case XP_DIALOG_CANCEL_BUTTON: - retVal = PR_FALSE; - break; - - case XP_DIALOG_MOREINFO_BUTTON: - node = htmlElementList->node; - - preHTMLdynStr = constructHTMLTagData(preHTMLdynStr, RDF_SETCOLOR_JS, NULL); - - dynStr = constructHTMLTagData(dynStr, RDF_HTML_INFOHEADER_STR, XP_GetString(RDF_TREE_COLORS_TITLE)); - dynStr = constructHTML(dynStr, node, gNavCenter->viewFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->viewBGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->viewBGURL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->showTreeConnections, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->treeConnectionFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->treeOpenTriggerIconURL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->treeClosedTriggerIconURL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->triggerPlacement, HT_COLUMN_STRING); - - dynStr = constructHTMLTagData(dynStr, RDF_HTML_EMPTYHEADER_STR, ""); - dynStr = constructHTMLTagData(dynStr, RDF_HTML_INFOHEADER_STR, XP_GetString(RDF_TITLEBAR_COLORS_TITLE)); - dynStr = constructHTML(dynStr, node, gNavCenter->titleBarFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->titleBarBGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->titleBarBGURL, HT_COLUMN_STRING); - - dynStr = constructHTMLTagData(dynStr, RDF_HTML_EMPTYHEADER_STR, ""); - dynStr = constructHTMLTagData(dynStr, RDF_HTML_INFOHEADER_STR, XP_GetString(RDF_SELECTION_COLORS_TITLE)); - dynStr = constructHTML(dynStr, node, gNavCenter->selectionFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->selectionBGColor, HT_COLUMN_STRING); - - dynStr = constructHTMLTagData(dynStr, RDF_HTML_EMPTYHEADER_STR, ""); - dynStr = constructHTMLTagData(dynStr, RDF_HTML_INFOHEADER_STR, XP_GetString(RDF_COLUMN_COLORS_TITLE)); - dynStr = constructHTML(dynStr, node, gNavCenter->columnHeaderFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->columnHeaderBGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->columnHeaderBGURL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->showColumnHeaders, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->showColumnHeaderDividers, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->selectedColumnHeaderFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->selectedColumnHeaderBGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->sortColumnFGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->sortColumnBGColor, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->showColumnHilite, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->showDivider, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, gNavCenter->dividerColor, HT_COLUMN_STRING); - - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->viewFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->viewFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->viewBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->viewBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->treeConnectionFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->treeConnectionFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->titleBarFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->titleBarFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->titleBarBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->titleBarBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->selectionFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->selectionFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->selectionBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->selectionBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->columnHeaderFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->columnHeaderFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->columnHeaderBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->columnHeaderBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->selectedColumnHeaderFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->selectedColumnHeaderFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->selectedColumnHeaderBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->selectedColumnHeaderBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->sortColumnFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->sortColumnFGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->sortColumnBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->sortColumnBGColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_COLOR_LAYER, resourceID(gNavCenter->dividerColor)); - postHTMLdynStr = constructHTMLTagData(postHTMLdynStr, RDF_DEFAULTCOLOR_JS, resourceID(gNavCenter->dividerColor)); - - strings = XP_GetDialogStrings(RDF_HTMLCOLOR_STR); - if ((strings != NULL) && (dynStr != NULL)) - { - if (preHTMLdynStr != NULL) XP_CopyDialogString(strings, 0, preHTMLdynStr); - XP_CopyDialogString(strings, 1, dynStr); - if (postHTMLdynStr != NULL) XP_CopyDialogString(strings, 2, postHTMLdynStr); - XP_MakeHTMLDialog(NULL, &rdfColorPropDialogInfo, RDF_COLOR_TITLE, - strings, node, PR_TRUE); - } - if (dynStr != NULL) XP_FREE(dynStr); - if (strings != NULL) XP_FreeDialogStrings(strings); - break; - } - - if (retVal == PR_FALSE) - { - freeHtmlElementList(); - } - return(retVal); -} -#endif - - - -#ifndef HT_RAPTOR -static XPDialogInfo rdfPropDialogInfo = { - (XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON), - rdfProcDialogHandler, - 500, 400 -}; -static XPDialogInfo rdfWorkspacePropDialogInfo = { - (XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON | XP_DIALOG_MOREINFO_BUTTON), - rdfProcDialogHandler, - 500, 400 -}; -#endif - - - -void -addHtmlElement(HT_Resource node, RDF_Resource token, uint32 tokenType) -{ - _htmlElementPtr htmlElement; - - if ((htmlElement = (_htmlElementPtr)getMem(sizeof(_htmlElement))) != NULL) - { - htmlElement->node = node; - htmlElement->token = token; - htmlElement->tokenType = tokenType; - - htmlElement->next = htmlElementList; - htmlElementList = htmlElement; - } -} - - - -void -freeHtmlElementList() -{ - _htmlElementPtr htmlElement,nextElement; - - htmlElement = htmlElementList; - while (htmlElement != NULL) - { - nextElement = htmlElement->next; - free(htmlElement); - htmlElement = nextElement; - } - htmlElementList = NULL; -} - - - -_htmlElementPtr -findHtmlElement(void *token) -{ - _htmlElementPtr htmlElement; - - htmlElement = htmlElementList; - while(htmlElement != NULL) - { - if (htmlElement->token == token) break; - htmlElement = htmlElement->next; - } - return(htmlElement); -} - - - -void -freeHtmlElement(void *token) -{ - _htmlElementPtr *htmlElement, nextElement; - - htmlElement = &htmlElementList; - while((*htmlElement) != NULL) - { - if ((*htmlElement)->token == token) - { - nextElement = (*htmlElement)->next; - free(*htmlElement); - *htmlElement = nextElement; - break; - } - htmlElement = &((*htmlElement)->next); - } -} - - - -#ifndef HT_RAPTOR -char * -constructHTMLTagData(char *dynStr, int strID, char *data) -{ - char *html, *temp1, *temp2; - - if ((html = XP_GetString(strID)) != NULL) - { - /* yikes... need to find a better solution */ - if (data == NULL) data=""; - temp1 = PR_smprintf(html, data, data, data, data, data, data, data, data); - if (temp1 != NULL) - { - if (dynStr != NULL) - { - temp2 = PR_smprintf("%s%s",dynStr, temp1); - XP_FREE(temp1); - XP_FREE(dynStr); - dynStr = temp2; - } - else - { - dynStr = temp1; - } - } - } - return(dynStr); -} -#endif - - - -#ifndef HT_RAPTOR -char * -constructHTML(char *dynStr, HT_Resource node, void *token, uint32 tokenType) -{ - struct tm *time; - time_t dateVal; - PRBool isEditable; - char *html = NULL, *temp1 = NULL, *temp2; - char *data = NULL, *tokenName; - char buffer[128]; - - XP_ASSERT(node != NULL); - XP_ASSERT(token != NULL); - - if (findHtmlElement(token) != NULL) return(dynStr); - - isEditable = HT_IsNodeDataEditable(node, token, tokenType); - if ((!HT_GetNodeData (node, token, tokenType, &data)) || (data == NULL)) - { - data = ""; - } - else - { - switch(tokenType) - { - case HT_COLUMN_RESOURCE: - data = resourceID((RDF_Resource)token); - break; - - case HT_COLUMN_STRING: - break; - - case HT_COLUMN_DATE_STRING: - if ((dateVal = (time_t)atol((char *)data)) == 0) break; - if ((time = localtime(&dateVal)) == NULL) break; -#ifdef XP_WIN - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#endif - data = buffer; - break; - - case HT_COLUMN_DATE_INT: - if ((time = localtime((time_t *) &data)) == NULL) break; -#ifdef XP_WIN - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_WINDATE),time); -#elif XP_UNIX - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#else - strftime(buffer,sizeof(buffer),XP_GetString(RDF_HTML_MACDATE),time); -#endif - data = buffer; - break; - - case HT_COLUMN_INT: - sprintf(buffer,"%d",(int)data); - data = buffer; - break; - - case HT_COLUMN_UNKNOWN: - default: - data = NULL; - return(dynStr); - break; - } - } - - addHtmlElement(node, token, tokenType); - - tokenName = (char *) RDF_GetSlotValue(gNCDB, token, - gCoreVocab->RDF_name, - RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - if (tokenName == NULL) - { - tokenName = resourceID((RDF_Resource)token); - if (tokenName != NULL) - { - tokenName = copyString(tokenName); - } - } - - if (isEditable) - { - -#ifdef HT_PASSWORD_RTNS - if (token == gNavCenter->RDF_Password) - { - html = XP_GetString(RDF_HTML_STR_2); - } - else -#endif - - if (token == gWebData->RDF_description) - { - html = XP_GetString(RDF_HTML_STR_5); - } - else if ((token == gNavCenter->viewFGColor) || (token == gNavCenter->viewBGColor) || - (token == gNavCenter->selectionFGColor) || (token == gNavCenter->selectionBGColor) || - (token == gNavCenter->columnHeaderFGColor) || (token == gNavCenter->columnHeaderBGColor) || - (token == gNavCenter->sortColumnFGColor) || (token == gNavCenter->sortColumnBGColor) || - (token == gNavCenter->titleBarFGColor) || (token == gNavCenter->titleBarBGColor) || - (token == gNavCenter->selectedColumnHeaderFGColor) || (token == gNavCenter->selectedColumnHeaderBGColor) || - (token == gNavCenter->treeConnectionFGColor) || (token == gNavCenter->dividerColor)) - { - /* yikes... need to find a better solution */ - html = XP_GetString(RDF_HTML_COLOR_STR); - temp1 = PR_smprintf(html, tokenName, resourceID((RDF_Resource)token), - (data) ? data:"", resourceID((RDF_Resource)token), - resourceID((RDF_Resource)token)); - } - else if (token == gNavCenter->RDF_HTMLHeight) - { - html = XP_GetString(RDF_HTML_STR_NUMBER); - } - else - { - html = XP_GetString(RDF_HTML_STR_1); - } - if (temp1 == NULL) - { - temp1 = PR_smprintf(html, tokenName, resourceID((RDF_Resource)token), (data) ? data:""); - } - } - else if ((data != NULL) && ((*data) != '\0')) - { - html=XP_GetString(RDF_HTML_STR_3); - temp1 = PR_smprintf(html, tokenName, (data) ? data:""); - } - - if (tokenName != NULL) - { - freeMem(tokenName); - } - - if (temp1 != NULL) - { - if (dynStr != NULL) - { - temp2 = PR_smprintf("%s%s",dynStr, temp1); - XP_FREE(temp1); - XP_FREE(dynStr); - dynStr = temp2; - } - else - { - dynStr = temp1; - } - } - return(dynStr); -} -#endif - - - -#ifndef HT_RAPTOR -char * -constructHTMLPermission(char *dynStr, HT_Resource node, RDF_Resource token, char *text) -{ - char *html, *temp1, *temp2; - PRBool enabledFlag = PR_FALSE; - - XP_ASSERT(node != NULL); - XP_ASSERT(token != NULL); - XP_ASSERT(text != NULL); - - html=XP_GetString(RDF_HTML_STR_4); - if (html != NULL) - { - enabledFlag = htIsOpLocked(node, token); - - temp1 = PR_smprintf(html, resourceID((RDF_Resource)token), - resourceID((RDF_Resource)token), - (enabledFlag) ? "CHECKED":"", text); - if (dynStr != NULL) - { - temp2 = PR_smprintf("%s%s",dynStr, temp1); - XP_FREE(temp1); - dynStr = temp2; - } - else - { - dynStr = temp1; - } - addHtmlElement(node, token, HT_COLUMN_RESOURCE); - } - return(dynStr); -} -#endif - - - -PRBool -htIsOpLocked(HT_Resource node, RDF_Resource token) -{ - PRBool lockedFlag = PR_FALSE; - - XP_ASSERT(node != NULL); - XP_ASSERT(token != NULL); - - if ((node != NULL) && (node->node != NULL) && (token != NULL)) - { - lockedFlag = RDF_HasAssertion(gNCDB, node->node, - gNavCenter->RDF_Locks, token, - RDF_RESOURCE_TYPE, 1); - } - return(lockedFlag); -} - - - -#ifndef HT_RAPTOR -PRBool -rdfFindDialogHandler(XPDialogState *dlgstate, char **argv, int argc, unsigned int button) -{ - HT_Pane paneList; - char *url = NULL, *temp; - PRBool retVal = PR_TRUE; - int loop; - - switch(button) - { - case XP_DIALOG_OK_BUTTON: - if ((argv != NULL) && (argc>6)) - { - /* build up find URL */ - for (loop=4; looppersonaltoolbar) && - (!paneList->toolbar) && - (!paneList->bookmarkmenu) && - (!paneList->special)) break; - paneList = paneList->next; - } - if (paneList == NULL) paneList = gHTTop; - HT_LaunchURL(gHTTop, url, NULL); - - XP_FREE(url); - url = NULL; - } - } - retVal = PR_FALSE; - break; - - case XP_DIALOG_CANCEL_BUTTON: - retVal = PR_FALSE; - break; - } - return(retVal); -} -#endif - - - -#ifndef HT_RAPTOR -#ifdef XP_MAC -static XPDialogInfo rdfFindDialogInfo = { - (XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON), - rdfFindDialogHandler, - 450, 120 -}; -#else -static XPDialogInfo rdfFindDialogInfo = { - (XP_DIALOG_OK_BUTTON | XP_DIALOG_CANCEL_BUTTON), - rdfFindDialogHandler, - 450, 150 -}; -#endif -#endif - - - -#ifndef HT_RAPTOR -char * -constructBasicHTML(char *dynStr, int strID, char *data1, char *data2) -{ - char *newDynStr = dynStr, *html, *temp; - - if ((html=XP_GetString(strID)) != NULL) - { - temp = PR_smprintf(html, ((data1 != NULL) ? data1:""), - ((data2 != NULL) ? data2:"")); - if (temp != NULL) - { - if (dynStr != NULL) - { - newDynStr = append2Strings(dynStr, temp); - XP_FREE(dynStr); - XP_FREE(temp); - } - else - { - newDynStr = temp; - } - } - } - return(newDynStr); -} -#endif - - - -#ifndef HT_RAPTOR -PR_PUBLIC_API(void) -HT_Find(char *hint) -{ - XPDialogStrings *strings = NULL; - char *dynStr = NULL, *postHTMLdynStr = NULL; - MWContext *context; - - XP_ASSERT( IsUTF8String(hint)); - dynStr = constructBasicHTML(dynStr, RDF_FIND_STR1, "", ""); - - /* build location select */ - dynStr = constructBasicHTML(dynStr, RDF_SELECT_START, "location", ""); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, "local", - XP_GetString(RDF_LOCAL_LOCATION_STR)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, "remote", - XP_GetString(RDF_REMOTE_LOCATION_STR)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, "all", - XP_GetString(RDF_ALL_LOCATION_STR)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_END, "", ""); - - dynStr = constructBasicHTML(dynStr, RDF_FIND_STR2, "", ""); - - /* build attribute select */ - dynStr = constructBasicHTML(dynStr, RDF_SELECT_START, "attribute", ""); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_name), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_name)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_URL), - RDF_GetResourceName(gNCDB, gWebData->RDF_URL)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gNavCenter->RDF_URLShortcut), - RDF_GetResourceName(gNCDB, gNavCenter->RDF_URLShortcut)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_description), - RDF_GetResourceName(gNCDB, gWebData->RDF_description)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_keyword), - RDF_GetResourceName(gNCDB, gWebData->RDF_keyword)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_size), - RDF_GetResourceName(gNCDB, gWebData->RDF_size)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_firstVisitDate), - RDF_GetResourceName(gNCDB, gWebData->RDF_firstVisitDate)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_lastVisitDate), - RDF_GetResourceName(gNCDB, gWebData->RDF_lastVisitDate)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_creationDate), - RDF_GetResourceName(gNCDB, gWebData->RDF_creationDate)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gWebData->RDF_lastModifiedDate), - RDF_GetResourceName(gNCDB, gWebData->RDF_lastModifiedDate)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gNavCenter->RDF_bookmarkAddDate), - RDF_GetResourceName(gNCDB, gNavCenter->RDF_bookmarkAddDate)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_END, "", ""); - - /* build method select */ - dynStr = constructBasicHTML(dynStr, RDF_SELECT_START, "method", ""); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_substring), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_substring)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_stringEquals), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_stringEquals)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_stringNotEquals), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_stringNotEquals)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_stringStartsWith), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_stringStartsWith)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_OPTION, - resourceID(gCoreVocab->RDF_stringEndsWith), - RDF_GetResourceName(gNCDB, gCoreVocab->RDF_stringEndsWith)); - dynStr = constructBasicHTML(dynStr, RDF_SELECT_END, "", ""); - - /* build find text input field */ - if (hint != NULL) - { - /* XXX should really use NET_EscapeHTML here! */ - hint = NET_Escape(hint, URL_XALPHAS); - } - dynStr = constructBasicHTML(dynStr, RDF_FIND_INPUT_STR, "value", - ((hint != NULL) ? hint : "")); - if (hint != NULL) - { - XP_FREE(hint); - hint = NULL; - } - - strings = XP_GetDialogStrings(RDF_HTML_STR); - if (strings != NULL) - { - if (dynStr != NULL) - { - XP_CopyDialogString(strings, 0, dynStr); - } - if (postHTMLdynStr != NULL) - { - XP_CopyDialogString(strings, 1, postHTMLdynStr); - } - context = gRDFMWContext(NULL); - XP_MakeHTMLDialog(context, &rdfFindDialogInfo, RDF_FIND_TITLE, - strings, NULL, PR_TRUE); - } - if (dynStr != NULL) XP_FREE(dynStr); - if (strings != NULL) XP_FreeDialogStrings(strings); -} -#endif - - - -#ifndef HT_RAPTOR -PR_PUBLIC_API(void) -HT_Properties (HT_Resource node) -{ - RDF_BT type; - RDF_Cursor c; - RDF_Resource r; - PRBool isContainer, showPermissions = PR_FALSE; - PRBool mcEnabled = PR_FALSE; - XPDialogStrings *strings = NULL; - char *dynStr = NULL, *postHTMLdynStr = NULL, *title; - MWContext *context; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - type = resourceType(node->node); - if (!(isContainer=HT_IsContainer(node))) - { - if (node->parent != NULL) - { - type = resourceType(node->parent->node); - } - } - - if (gMissionControlEnabled == PR_TRUE) - { - showPermissions = PR_TRUE; - } - - title = HT_GetNodeName(node); - if (title == NULL) - { - title = HT_GetNodeURL(node); - } - dynStr = constructHTMLTagData(dynStr, RDF_HTML_MAININFOHEADER_STR, title ); - - switch(type) - { - case RDF_RT: - if (HT_IsContainer(node)) - { - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_description, HT_COLUMN_STRING); -#ifdef HT_PASSWORD_RTNS - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_Password, HT_COLUMN_STRING); -#endif - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_bookmarkAddDate, HT_COLUMN_STRING); -#ifdef HT_LARGE_ICON_SUPPORT - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_largeIcon, HT_COLUMN_STRING); -#endif - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_smallIcon, HT_COLUMN_STRING); - if (node->parent == NULL) - { - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_HTMLURL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_HTMLHeight, HT_COLUMN_STRING); - } - } - else - { - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_URL, HT_COLUMN_STRING); - if (HT_IsLocalData(node)) - { - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_URLShortcut, HT_COLUMN_STRING); - } - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_description, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_keyword, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_bookmarkAddDate, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_lastVisitDate, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_lastModifiedDate, HT_COLUMN_STRING); -#ifdef HT_LARGE_ICON_SUPPORT - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_largeIcon, HT_COLUMN_STRING); -#endif - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_smallIcon, HT_COLUMN_STRING); - } - break; - - case LFS_RT: - case FTP_RT: - case ES_RT: - showPermissions = PR_FALSE; - if (HT_IsContainer(node)) - { - if (node->parent == NULL) - { - showPermissions = PR_TRUE; - } - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_description, HT_COLUMN_STRING); - if (node->node != gNavCenter->RDF_LocalFiles) - { - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_URL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_creationDate, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_lastModifiedDate, HT_COLUMN_STRING); - } - else - { -#ifdef HT_LARGE_ICON_SUPPORT - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_largeIcon, HT_COLUMN_STRING); -#endif - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_smallIcon, HT_COLUMN_STRING); - } - } - else - { - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_URL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_size, HT_COLUMN_INT); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_creationDate, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_lastModifiedDate, HT_COLUMN_STRING); - } - break; - - case HISTORY_RT: - showPermissions = PR_FALSE; - if (HT_IsContainer(node)) - { - if (node->parent == NULL) - { - showPermissions = PR_TRUE; - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); -#ifdef HT_LARGE_ICON_SUPPORT - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_largeIcon, HT_COLUMN_STRING); -#endif - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->RDF_smallIcon, HT_COLUMN_STRING); - } - } - else - { - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_URL, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_firstVisitDate, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_lastVisitDate, HT_COLUMN_STRING); - /* XXX should also show calculated expiration date */ - dynStr = constructHTML(dynStr, node, (void *)gWebData->RDF_numAccesses, HT_COLUMN_INT); - } - break; - - case COOKIE_RT: - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - if (!HT_IsContainer(node)) - { - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookieHost, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookiePath, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookieValue, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookieExpires, HT_COLUMN_STRING); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookieDomain, HT_COLUMN_INT); - dynStr = constructHTML(dynStr, node, (void *)gNavCenter->cookieSecure, HT_COLUMN_INT); - } - break; - - case SEARCH_RT: - case LDAP_RT: - case PM_RT: - case RDM_RT: - default: - dynStr = constructHTML(dynStr, node, (void *)gCoreVocab->RDF_name, HT_COLUMN_STRING); - break; - } - - if (dynStr != NULL) - { - - /* dynamic property lookup */ - - if ((c = RDF_ArcLabelsOut (node->view->pane->db, node->node)) != NULL) - { - while ((r = RDF_NextValue(c)) != NULL) - { - /* if (RDF_CursorValueType(c) == RDF_STRING_TYPE) */ - { - if (htIsPropertyInMoreOptions(r) == PR_FALSE) - { - dynStr = constructHTML(dynStr, node, (void *)r, HT_COLUMN_STRING); - } - } - } - RDF_DisposeCursor(c); - } - } - - if (showPermissions == PR_TRUE) - { - - dynStr = constructHTMLTagData(dynStr, RDF_HTML_EMPTYHEADER_STR, ""); - dynStr = constructHTMLTagData(dynStr, RDF_HTML_INFOHEADER_STR, XP_GetString(RDF_MISSION_CONTROL_TITLE)); - - if (HT_IsContainer(node) && (resourceType(node->node) == RDF_RT)) - { - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_AddLock, XP_GetString(RDF_ADDITIONS_ALLOWED)); - } - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_DeleteLock, XP_GetString(RDF_DELETION_ALLOWED)); - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_IconLock, XP_GetString(RDF_ICON_URL_LOCKED)); - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_NameLock, XP_GetString(RDF_NAME_LOCKED)); - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_CopyLock, XP_GetString(RDF_COPY_ALLOWED)); - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_MoveLock, XP_GetString(RDF_MOVE_ALLOWED)); - if (HT_IsContainer(node) && (node->parent == NULL)) - { - postHTMLdynStr = constructHTMLPermission(postHTMLdynStr, node, gNavCenter->RDF_WorkspacePosLock, XP_GetString(RDF_WORKSPACE_POS_LOCKED)); - } - } - - - strings = XP_GetDialogStrings(RDF_HTML_STR); - if (strings != NULL && dynStr != NULL) - { - XP_CopyDialogString(strings, 0, dynStr); - if (postHTMLdynStr != NULL) - { - XP_CopyDialogString(strings, 1, postHTMLdynStr); - } - - if ((context = XP_GetNavCenterContext(node->view->pane)) == NULL) - { - context = gRDFMWContext(NULL); - } - XP_MakeHTMLDialog(context, &rdfWorkspacePropDialogInfo, - RDF_MAIN_TITLE, strings, node, PR_TRUE); - } - else - { - freeHtmlElementList(); -#ifdef DEBUG - XP_MakeHTMLAlert(NULL, "Properties not yet implemented for this node type."); -#endif - } - if (dynStr != NULL) XP_FREE(dynStr); - if (strings != NULL) XP_FreeDialogStrings(strings); -} -#endif - - - -PR_PUBLIC_API(RDF_Resource) -HT_GetRDFResource (HT_Resource node) -{ - RDF_Resource r = NULL; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - r = node->node; - } - return (r); -} - - - -PR_PUBLIC_API(char *) -HT_GetNodeDisplayURL(HT_Resource node) -{ - char *retVal = NULL, *ans; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - ans = RDF_GetSlotValue(node->view->pane->db, node->node, gNavCenter->displayURL, - RDF_STRING_TYPE, 0, 1); - if (ans) return ans; - if (node != NULL) - { - if (node->node != NULL) - { - retVal = resourceID(node->node); - } - } - return(retVal); -} - - - -PR_PUBLIC_API(char *) -HT_GetNodeURL(HT_Resource node) -{ - char *retVal = NULL; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->node != NULL); - - if (node != NULL) - { - if (node->node != NULL) - { - retVal = resourceID(node->node); - } - } - return(retVal); -} - - - -PR_PUBLIC_API(char *) -HT_GetNodeName(HT_Resource node) -{ - char *name = NULL; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - HT_GetNodeData (node, gCoreVocab->RDF_name, HT_COLUMN_STRING, &name); - } -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(name)); -#endif - return(name); -} - - - -PR_PUBLIC_API(void) -HT_SetTopVisibleNodeIndex(HT_View view, uint32 topNodeIndex) -{ - XP_ASSERT(view != NULL); - - if (view != NULL) - { - view->topNodeIndex = topNodeIndex; - } -} - - - -PR_PUBLIC_API(uint32) -HT_GetTopVisibleNodeIndex(HT_View view) -{ - uint32 topNodeIndex = 0, listCount; - - XP_ASSERT(view != NULL); - - if (view != NULL) - { - topNodeIndex = view->topNodeIndex; - listCount = HT_GetItemListCount(view); - if (topNodeIndex > listCount) - { - topNodeIndex = listCount; - } - } - return(topNodeIndex); -} - - - -void -setHiddenState (HT_Resource node) -{ - HT_Resource child; - HT_View view; - HT_Pane pane; - - if ((child = node->child) == NULL) return; - if ((view = child->view) == NULL) return; - if ((pane = view->pane) == NULL) return; - - - if (HT_IsContainerOpen(node)) - { - /* show/hide all interior HT nodes */ - - while (child != NULL) - { - if ((node->flags & HT_HIDDEN_FLAG) || (!HT_IsContainerOpen(node))) - { - child->flags |= HT_HIDDEN_FLAG; - } - else - { - child->flags &= (~HT_HIDDEN_FLAG); - } - if (HT_IsContainer(child)) - { - setHiddenState(child); - } - child->flags &= (~HT_SELECTED_FLAG); - child = child->next; - } - } -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetAutoFlushOpenState (HT_Resource containerNode, PRBool isOpen) -{ - XP_ASSERT(containerNode != NULL); - - sendNotification(containerNode, HT_EVENT_NODE_OPENCLOSE_CHANGING, - NULL, HT_COLUMN_UNKNOWN); - if (isOpen) - { - containerNode->flags |= HT_AUTOFLUSH_OPEN_FLAG; - containerNode->flags &= (~HT_HIDDEN_FLAG); - } - else - { - containerNode->flags &= (~HT_AUTOFLUSH_OPEN_FLAG); - } - setHiddenState(containerNode); - refreshItemList(containerNode, HT_EVENT_NODE_OPENCLOSE_CHANGED); - if ((!isOpen) && (!(containerNode->flags & HT_OPEN_FLAG))) - { - destroyViewInt(containerNode, PR_FALSE); - } - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetOpenState (HT_Resource containerNode, PRBool isOpen) -{ - SBProvider sb; - - XP_ASSERT(containerNode != NULL); - - if ((isOpen && (!HT_IsContainerOpen(containerNode))) || - ((!isOpen) && (HT_IsContainerOpen(containerNode)))) - { - -#ifdef HT_PASSWORD_RTNS - if (isOpen && (ht_hasPassword(containerNode))) - { - if (ht_checkPassword(containerNode, PR_FALSE) == PR_FALSE) - { - return(HT_Err); - } - } -#endif - - if ((containerNode->view->inited == PR_FALSE) -#ifdef XP_MAC - /* Mac bookmark menu kludge */ - || (containerNode->view->pane->special == PR_TRUE) -#endif - ) - { - if (startsWith("ftp:", resourceID(containerNode->node)) || - startsWith("ldap:", resourceID(containerNode->node))) - { - return(HT_NoErr); - } - } - - sendNotification(containerNode, HT_EVENT_NODE_OPENCLOSE_CHANGING, - NULL, HT_COLUMN_UNKNOWN); - if (isOpen) - { - containerNode->flags |= HT_OPEN_FLAG; - containerNode->flags &= (~HT_HIDDEN_FLAG); - } - else - { - containerNode->flags &= (~HT_OPEN_FLAG); - } - setHiddenState(containerNode); - refreshItemList(containerNode, HT_EVENT_NODE_OPENCLOSE_CHANGED); - } - - sb = SBProviderOfNode(containerNode); - if (sb) sb->openp = isOpen; - - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetEnabledState(HT_Resource node, PRBool isEnabled) -{ - HT_Event theEvent; - - XP_ASSERT(node != NULL); - - if ((isEnabled && (!HT_IsEnabled(node))) || - ((!isEnabled) && (HT_IsEnabled(node)))) - { - if (isEnabled) - { - node->flags |= HT_ENABLED_FLAG; - theEvent = HT_EVENT_NODE_ENABLE; - } - else - { - node->flags &= (~HT_ENABLED_FLAG); - theEvent = HT_EVENT_NODE_DISABLE; - } - sendNotification(node, theEvent, NULL, HT_COLUMN_UNKNOWN); - } - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetSelectedState (HT_Resource node, PRBool isSelected) -{ - XP_ASSERT(node != NULL); - - if ((isSelected && (!HT_IsSelected(node))) || - ((!isSelected) && (HT_IsSelected(node)))) - { - if (isSelected) - { - node->flags |= HT_SELECTED_FLAG; - } - else - { - node->flags &= (~HT_SELECTED_FLAG); - } - sendNotification(node, HT_EVENT_NODE_SELECTION_CHANGED, - NULL, HT_COLUMN_UNKNOWN); - } - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_SetNotificationMask (HT_Pane pane, HT_NotificationMask mask) -{ - XP_ASSERT(pane != NULL); - - pane->mask = mask; - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_GetOpenState (HT_Resource containerNode, PRBool *openState) -{ - XP_ASSERT(containerNode != NULL); - XP_ASSERT(openState != NULL); - - *openState = (containerNode->flags & HT_OPEN_FLAG) ? PR_TRUE:PR_FALSE; - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_GetEnabledState (HT_Resource node, PRBool *enabledState) -{ - XP_ASSERT(node != NULL); - XP_ASSERT(enabledState != NULL); - - if ((node != NULL) && (enabledState != NULL)) - { - *enabledState = (node->flags & HT_ENABLED_FLAG) ? PR_TRUE:PR_FALSE; - } - return (HT_NoErr); -} - - - -PR_PUBLIC_API(HT_Error) -HT_GetSelectedState (HT_Resource node, PRBool *selectedState) -{ - XP_ASSERT(node != NULL); - XP_ASSERT(selectedState != NULL); - - if ((node != NULL) && (selectedState != NULL)) - { - *selectedState = (node->flags & HT_SELECTED_FLAG) ? PR_TRUE:PR_FALSE; - } - return (HT_NoErr); -} - - - -/* - HT_SetSelection: - Select a given node in a view, deselecting all other nodes -*/ - -PR_PUBLIC_API(HT_Error) -HT_SetSelection (HT_Resource node) -{ - HT_Resource res; - HT_View view; - uint32 itemListCount,theIndex; - - XP_ASSERT(node != NULL); - view = HT_GetView(node); - XP_ASSERT(view != NULL); - - itemListCount = HT_GetItemListCount(view); - for (theIndex=0; theIndexselectedNodeHint < itemListCount) && - HT_GetNthItem(view, view->selectedNodeHint) == startingNode) - { - theIndex = view->selectedNodeHint + 1; - } - else - { - theIndex = view->selectedNodeHint = 0; - } - - for (; theIndex < itemListCount; theIndex++) - { - if ((node=HT_GetNthItem (view, theIndex)) != NULL) - { - if (node == startingNode) continue; - HT_GetSelectedState (node, &selectedState); - if (selectedState == PR_TRUE) - { - view->selectedNodeHint = (uint32)theIndex; - nextNode = node; - break; - } - } - } - return (nextNode); -} - - - -/* - HT_ToggleSelection: - for a given node, unselect it if selected, otherwise select it -*/ - -PR_PUBLIC_API(void) -HT_ToggleSelection(HT_Resource node) -{ - PRBool selectedState; - - XP_ASSERT(node != NULL); - - HT_GetSelectedState (node, &selectedState); - HT_SetSelectedState (node, !selectedState); -} - - - -PR_PUBLIC_API(PRBool) -HT_Launch(HT_Resource node, MWContext *context) -{ - HT_DropAction dropAction; - PRBool retVal = PR_FALSE; - - XP_ASSERT(node != NULL); - - if (node != NULL) - { - if ( (!HT_IsContainer(node)) && (!HT_IsSeparator(node)) ) - { - dropAction = htLaunchSmartNode(node, NULL); - if (dropAction == DROP_ABORTED) - { - retVal = PR_TRUE; - } - else if (dropAction == DROP_NOT_ALLOWED) - { - if (RDF_HasAssertion(node->view->pane->db, node->node, - gNavCenter->RDF_Command, gNavCenter->RDF_Command_Launch, - RDF_RESOURCE_TYPE, 1)) - { - retVal = PR_TRUE; - - RDF_Assert(node->view->pane->db, node->node, - gNavCenter->RDF_Command, gNavCenter->RDF_Command_Launch, - RDF_RESOURCE_TYPE); - } - } - else - { - retVal = PR_TRUE; - } - } - } - return(retVal); -} - - - -#ifndef HT_RAPTOR -void -htSetFindResourceName(RDF db, RDF_Resource u) -{ - RDF_Resource searchOn, matchOn; - char *attribute = NULL, *method = NULL; - char *temp, *value, *name, *id, *p; - - XP_ASSERT(u != NULL); - if (u == NULL) return; - - if ((temp = copyString(resourceID(u))) != NULL) - { - if ((value = strcasestr(temp, "attribute=")) != NULL) - { - value += strlen("attribute="); - if ((p = strstr(value, "&")) != NULL) *p = '\0'; - if ((name = unescapeURL(value)) != NULL) - { - if ((searchOn = RDF_GetResource(NULL, name, 0)) != NULL) - { - if ((id = RDF_GetResourceName(db, searchOn)) != NULL) - { - attribute = copyString(id); - freeMem(id); - } - } - XP_FREE(name); - } - } - freeMem(temp); - } - if ((temp = copyString(resourceID(u))) != NULL) - { - if ((value = strcasestr(temp, "method=")) != NULL) - { - value += strlen("method="); - if ((p = strstr(value, "&")) != NULL) *p = '\0'; - if ((name = unescapeURL(value)) != NULL) - { - if ((matchOn = RDF_GetResource(NULL, name, 0)) == NULL) - { - matchOn = gCoreVocab->RDF_substring; - } - XP_FREE(name); - if ((name = RDF_GetResourceName(db, matchOn)) != NULL) - { - method = copyString(name); - freeMem(name); - } - } - } - freeMem(temp); - } - if ((temp = copyString(resourceID(u))) != NULL) - { - if ((value = strcasestr(temp, "value=")) != NULL) - { - value += strlen("value="); - if ((p = strstr(value, "&")) != NULL) *p = '\0'; - if ((name = unescapeURL(value)) != NULL) - { - if ((id = PR_smprintf(XP_GetString(RDF_FIND_FULLNAME_STR), - ((attribute != NULL) ? attribute : ""), - ((method != NULL) ? method : ""), - name)) != NULL) - { - remoteAssert(*(db->translators), u, - gCoreVocab->RDF_name, id, - RDF_STRING_TYPE, PR_TRUE); - XP_FREE(id); - } - XP_FREE(name); - } - } - freeMem(temp); - } - if (attribute != NULL) - { - XP_FREE(attribute); - attribute = NULL; - } - if (method != NULL) - { - XP_FREE(method); - method = NULL; - } -} -#endif - - - -void -htOpenTo(HT_View view, RDF_Resource u, PRBool selectView) -{ - HT_Pane pane; - HT_Resource htr; - RDF_Resource r; - char *id, *tempID, *p; - - XP_ASSERT(view != NULL); - if (view == NULL) return; - XP_ASSERT(u != NULL); - if (u == NULL) return; - - if ((pane = HT_GetPane(view)) == NULL) return; - if (selectView == PR_TRUE) - { - HT_SetSelectedView (pane, view); - refreshItemList ((view)->top, HT_EVENT_VIEW_REFRESH); - } - - if ((id = copyString(resourceID(u))) != NULL) - { - if ((startsWith("file://", id)) && (!endsWith("/", id))) - { - if ((r = RDF_GetResource(pane->db, id, 1)) != NULL) - { - if (iscontainerp(r)) - { - p = append2Strings(id, "/"); - freeMem(id); - id = p; - r = RDF_GetResource(pane->db, id, 1); - } - } - } - if ((tempID = copyString(id)) != NULL) - { - while ((p = strrchr(tempID, '/')) != NULL) - { - *(p+1) = '\0'; - - if ((r = RDF_GetResource(pane->db, tempID, 1)) == NULL) break; - htr = PR_HashTableLookup(pane->hash, r); - while (htr != NULL) - { - if (htr->view == view) - { - if ((HT_IsContainer(htr)) && (!HT_IsContainerOpen(htr))) - { - HT_SetOpenState(htr, PR_TRUE); - } - } - htr = htr->nextItem; - } - *p = 0; - } - freeMem(tempID); - } - gAutoOpenTo = id; - refreshItemList (HT_TopNode(view), HT_EVENT_VIEW_REFRESH); - gAutoOpenTo = NULL; - - if ((r = RDF_GetResource(pane->db, id, 1)) != NULL) - { - htr = PR_HashTableLookup(pane->hash, r); - while (htr != NULL) - { - if (htr->view == view) - { - HT_SetSelection (htr); - sendNotification(htr, HT_EVENT_NODE_SCROLLTO, - NULL, HT_COLUMN_UNKNOWN); - break; - } - htr = htr->nextItem; - } - } - freeMem(id); - } -} - - - -#ifndef HT_RAPTOR -PR_PUBLIC_API(PRBool) -HT_LaunchURL(HT_Pane pane, char *url, MWContext *context) -{ - HT_View view = NULL; - URL_Struct *urls; - RDF_Cursor c; - RDF_Resource u = NULL, parent = NULL, r; - PRBool isShortcut = PR_FALSE, retVal = PR_FALSE; - - XP_ASSERT(url != NULL); - - /* Note: if pane is NULL, bypass trying to load info into Aurora - but DO try shortcut matching */ - - if (url != NULL) - { - if ((c = RDF_Find(gNavCenter->RDF_URLShortcut, - gCoreVocab->RDF_stringEquals, - url, RDF_STRING_TYPE)) != NULL) - { - if ((r = RDF_NextValue(c)) != NULL) - { - isShortcut = PR_TRUE; - } - RDF_DisposeCursor(c); - } - } - - if (isShortcut == PR_TRUE) - { - url = copyString(resourceID(r)); - } - else - { - /* XXX should NET_Escape() this, but not the protocol part - (otherwise the colon is escaped) */ - url = copyString(url); - } - if (url != NULL) - { - if (pane != NULL) - { - if (startsWith("file://", url)) - { - if ((u = RDF_GetResource(pane->db, url, 1)) != NULL) - { - if (iscontainerp(u)) - { - parent = NULL; - view = HT_GetViewType(pane, HT_VIEW_FILES); - htOpenTo(view, u, PR_TRUE); - retVal = PR_TRUE; - } - } - } - else if (startsWith("ftp://", url) && endsWith("/", url)) - { - u = RDF_GetResource(pane->db, url, 1); - parent = gNavCenter->RDF_FTP; - view = HT_GetViewType(pane, HT_VIEW_FILES); - } - else if (startsWith("find:", url)) - { - if ((u = RDF_GetResource(pane->db, url, 1)) != NULL) - { - setContainerp(u, PR_TRUE); - setResourceType(u, SEARCH_RT); - htSetFindResourceName(pane->db, u); - } - parent = gNavCenter->RDF_Search; - view = HT_GetViewType(pane, HT_VIEW_SEARCH); - } - } - if (pane != NULL) - { - if (view != NULL) - { - HT_SetSelectedView (pane, view); - refreshItemList ((view)->top, HT_EVENT_VIEW_REFRESH); - } - - if (parent != NULL) - { - if (startsWith("ftp://", resourceID(u))) - { - gAutoOpenPane = pane; - remoteStoreAdd (gRemoteStore, gNavCenter->RDF_FTP, - gCoreVocab->RDF_parent, gNavCenter->RDF_LocalFiles, - RDF_RESOURCE_TYPE, PR_TRUE); - - gAutoOpenPane = NULL; - } - gAutoOpenPane = pane; - remoteStoreAdd (gRemoteStore, u, gCoreVocab->RDF_parent, - parent, RDF_RESOURCE_TYPE, PR_TRUE); - gAutoOpenPane = NULL; - htSetBookmarkAddDateToNow(u); - - retVal = PR_TRUE; - } - } - else if ((isShortcut == PR_TRUE) && (context != NULL)) - { - retVal = PR_TRUE; - if ((urls = NET_CreateURLStruct(url, NET_NORMAL_RELOAD)) != NULL) - { - urls->method = URL_GET_METHOD; - FE_GetURL(context, urls); - } - } - freeMem(url); - } - return(retVal); -} -#endif - - - -PR_PUBLIC_API(HT_Error) -HT_GetNotificationMask (HT_Pane pane, HT_NotificationMask *mask) -{ - XP_ASSERT(pane != NULL); - XP_ASSERT(mask != NULL); - - *mask = pane->mask; - return (HT_NoErr); -} - - - -PRBool -mutableContainerp (RDF_Resource node) -{ - XP_ASSERT(node != NULL); - - return (containerp(node) && (resourceType(node) == RDF_RT)); -} - - - -PR_PUBLIC_API(HT_Resource) -HT_MakeNewContainer(HT_Resource parent, char* name) -{ - HT_Resource hnc = NULL; - RDF db; - RDF_Resource nc; - char *id = NULL; - -#ifdef NSPR20 - PRTime tm; -#else - int64 tm; -#endif - -#ifndef HAVE_LONG_LONG - double doubletm; -#endif - -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(name)); -#endif - if (mutableContainerp(parent->node)) - { - db = parent->view->pane->db; - -#ifdef NSPR20 - tm = PR_Now(); -#else - tm = PR_LocalTime(); -#endif - -#ifdef HAVE_LONG_LONG - id = PR_smprintf("Topic%d", (double)tm); -#else - LL_L2D(doubletm, tm); - id = PR_smprintf("Topic%d.rdf", doubletm); -#endif - nc = RDF_GetResource(db, id, 1); - setContainerp(nc, 1); - - RDF_Assert(db, nc, gCoreVocab->RDF_name, name, RDF_STRING_TYPE); - RDF_Assert(db, nc, gCoreVocab->RDF_parent, parent->node, RDF_RESOURCE_TYPE); - RDF_Assert(db, nc, gCoreVocab->RDF_name, name, RDF_STRING_TYPE); - hnc = newHTEntry(parent->view, nc); - - refreshItemList(parent, HT_EVENT_NODE_ADDED); - } - return (hnc); -} - -PR_PUBLIC_API(PRBool) -HT_IsDropTarget(HT_Resource dropTarget) { - return (dropTarget && (HT_IsContainer(dropTarget) || (resourceType(dropTarget->node) == PMF_RT))); -} - - -PR_PUBLIC_API(HT_DropAction) -HT_CanDropHTROn(HT_Resource dropTarget, HT_Resource obj) -{ - return dropOn (dropTarget, obj, 1) ; -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_CanDropURLOn(HT_Resource dropTarget, char* url) -{ - return dropURLOn(dropTarget, url, NULL, 1); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropHTROn(HT_Resource dropTarget, HT_Resource obj) -{ - HT_DropAction ac; - - ac = dropOn(dropTarget, obj, 0); - resynchContainer (dropTarget); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - return (ac); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropURLOn(HT_Resource dropTarget, char* url) -{ - HT_DropAction ac; - - ac = dropURLOn(dropTarget, url, NULL, 0); - resynchContainer (dropTarget); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - return (ac); -} - - - -char * -possiblyCleanUpTitle (char* title) -{ - char *newTitle = NULL; - int16 n; - - if (title != NULL) - { - if ((newTitle = copyString(title)) != NULL) - { - n = charSearch(-51, newTitle); - if (n > -1) newTitle[n] = '\0'; - } - } - return(newTitle); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropURLAndTitleOn(HT_Resource dropTarget, char* url, char *title) -{ - HT_DropAction ac; - char *newTitle; - -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(title)); -#endif - newTitle = possiblyCleanUpTitle(title); - ac = dropURLOn(dropTarget, url, newTitle, 0); - if (newTitle != NULL) - { - freeMem(newTitle); - newTitle = NULL; - } - resynchContainer (dropTarget); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - return (ac); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_CanDropHTRAtPos(HT_Resource dropTarget, HT_Resource obj, PRBool before) -{ - HT_Resource dropParent; - HT_View viewList; - HT_Pane pane; - HT_DropAction action = DROP_NOT_ALLOWED; - - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(obj != NULL); - if (dropTarget == NULL) return(action); - if (obj == NULL) return(action); - if ( dropTarget == obj ) return(DROP_NOT_ALLOWED); - - dropParent = dropTarget->parent; - - if ((dropParent == NULL) && (obj->parent == NULL)) - { - /* workspace reordering */ - - if (!htIsOpLocked(obj, gNavCenter->RDF_WorkspacePosLock)) - { - if (before) - { - if (!htIsOpLocked(dropTarget, gNavCenter->RDF_WorkspacePosLock)) - { - action = COPY_MOVE_CONTENT; - } - } - else - { - if ((pane = HT_GetPane(HT_GetView(dropTarget))) != NULL) - { - viewList = pane->viewList; - while (viewList != NULL) - { - if (HT_TopNode(viewList) == dropTarget) - { - viewList = viewList->next; - break; - } - viewList = viewList->next; - } - if (viewList != NULL) - { - if (!htIsOpLocked(HT_TopNode(viewList), gNavCenter->RDF_WorkspacePosLock)) - { - action = COPY_MOVE_CONTENT; - } - } - } - } - } - } - else if ((dropParent == NULL) && (obj->parent != NULL)) - { - /* adding container before/after reordering */ - if (before) - { - if (!htIsOpLocked(dropTarget, gNavCenter->RDF_WorkspacePosLock)) - { - action = COPY_MOVE_CONTENT; - } - } - else - { - if ((pane = HT_GetPane(HT_GetView(dropTarget))) != NULL) - { - viewList = pane->viewList; - while (viewList != NULL) - { - if (HT_TopNode(viewList) == dropTarget) - { - viewList = viewList->next; - break; - } - viewList = viewList->next; - } - if (viewList != NULL) - { - if (!htIsOpLocked(HT_TopNode(viewList), gNavCenter->RDF_WorkspacePosLock)) - { - action = COPY_MOVE_CONTENT; - } - } - } - } - } - else - { - action = dropOn(dropParent, obj, 1); - if (action && remoteStoreHasAssertion(gLocalStore, dropTarget->node, - gCoreVocab->RDF_parent, dropParent->node, RDF_RESOURCE_TYPE, 1)) - { - } - else - { - action = DROP_NOT_ALLOWED; - } - } - return (action); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_CanDropURLAtPos(HT_Resource dropTarget, char *url, PRBool before) -{ - HT_Resource dropParent; - HT_DropAction action = DROP_NOT_ALLOWED; - - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(url != NULL); - if (dropTarget == NULL) return(DROP_NOT_ALLOWED); - if (url == NULL) return(DROP_NOT_ALLOWED); - - dropParent = dropTarget->parent; - action = dropURLOn(dropParent, url, NULL, 1); - /* - if (action && remoteStoreHasAssertion(gLocalStore, dropTarget->node, - gCoreVocab->RDF_parent, dropParent->node, RDF_RESOURCE_TYPE, 1)) - { - } - else - { - action = DROP_NOT_ALLOWED; - } - */ - return (action); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropHTRAtPos(HT_Resource dropTarget, HT_Resource obj, PRBool before) -{ - HT_DropAction action = DROP_NOT_ALLOWED; - uint32 workspacePos; - - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(obj != NULL); - if (dropTarget == NULL) return(DROP_NOT_ALLOWED); - if (obj == NULL) return(DROP_NOT_ALLOWED); - if ( dropTarget == obj ) return(DROP_NOT_ALLOWED); - - if (dropTarget->parent == NULL) - { - if (obj->parent == NULL) - { - /* workspace reordering */ - - htSetWorkspaceOrder(obj->node, dropTarget->node, !before); - action = COPY_MOVE_CONTENT; - } - else - { - /* new workspace, specifying position */ - - workspacePos = (HT_GetView(dropTarget))->workspacePos; - if (before && (workspacePos>0)) --workspacePos; - htNewWorkspace(HT_GetPane(HT_GetView(dropTarget)), - resourceID(HT_GetRDFResource(obj)), NULL, workspacePos); - } - } - else - { - action = copyMoveRDFLinkAtPos(dropTarget, obj, before); - resynchContainer (dropTarget->parent); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - } - return (action); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropURLAtPos(HT_Resource dropTarget, char* url, PRBool before) -{ - HT_DropAction ac; - - ac = copyRDFLinkURLAt(dropTarget, url, NULL, before); - resynchContainer (dropTarget->parent); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - return (ac); -} - - - -PR_PUBLIC_API(HT_DropAction) -HT_DropURLAndTitleAtPos(HT_Resource dropTarget, char* url, char *title, PRBool before) -{ - HT_DropAction ac; - char *newTitle; - -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(title)); -#endif - newTitle = possiblyCleanUpTitle(title); - ac = copyRDFLinkURLAt(dropTarget, url, newTitle, before); - if (newTitle != NULL) - { - freeMem(newTitle); - newTitle = NULL; - } - resynchContainer (dropTarget->parent); - refreshItemList(dropTarget, HT_EVENT_VIEW_REFRESH); - return (ac); -} - - - -PRBool -htRemoveChild(HT_Resource parent, HT_Resource child, PRBool moveToTrash) -{ - RDF_Resource r; - RDF_BT type; - RDF_Resource childNode = child->node; - RDF_Resource parentNode = parent->node; - - /* disallow various nodes from being removed */ - - if (child->node == gNavCenter->RDF_HistoryBySite || - child->node == gNavCenter->RDF_HistoryByDate) - { - return(PR_TRUE); - } - if ((r = RDFUtil_GetPTFolder()) != NULL) - { - if (child->node == r) return(PR_TRUE); - } - if ((r = RDFUtil_GetNewBookmarkFolder()) != NULL) - { - if (child->node == r) return(PR_TRUE); - } - if (htIsOpLocked(child, gNavCenter->RDF_DeleteLock)) - { - return(PR_TRUE); - } - - type = resourceType(child->node); -#ifndef HT_RAPTOR - if ((type == LFS_RT) || (type == ES_RT) || (type == FTP_RT)) - { - if (moveToTrash == PR_FALSE) - { - if (HT_IsContainer(child)) - { - if (!FE_Confirm(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_DELETEFOLDER), - resourceID(child->node)))) return(PR_TRUE); - if (fsRemoveDir( resourceID(child->node), PR_TRUE) == PR_TRUE) - { - FE_Alert(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_UNABLETODELETEFOLDER), - resourceID(child->node))); - return(PR_TRUE); - } - } - else - { - if (!FE_Confirm(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_DELETEFILE), - resourceID(child->node)))) return(PR_TRUE); - if (CallPRWriteAccessFileUsingFileURL(resourceID(child->node))) - { - FE_Alert(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_UNABLETODELETEFILE), - resourceID(child->node))); - return(PR_TRUE); - } - } - } - else - { - /* - hack type so that the object can be unasserted - without the actual file/folder being deleted - */ - remoteUnassert (gLocalStore, child->node, - gCoreVocab->RDF_parent, parent->node, RDF_RESOURCE_TYPE); - return(PR_FALSE); - } - } -#endif - - /* assert into trash? */ - - if (moveToTrash == PR_TRUE) - { - RDF_Assert(parent->view->pane->db, childNode, gCoreVocab->RDF_parent, - gNavCenter->RDF_Trash, RDF_RESOURCE_TYPE); - } - RDF_Unassert(parent->view->pane->db, childNode, gCoreVocab->RDF_parent, - parentNode, RDF_RESOURCE_TYPE); - return(PR_FALSE); -} - - - -PR_PUBLIC_API(PRBool) -HT_RemoveChild (HT_Resource parent, HT_Resource child) -{ - PRBool retVal; - - retVal = htRemoveChild(parent, child, PR_TRUE); - refreshPanes(PR_FALSE, PR_FALSE, NULL); - return(retVal); -} - - - -PR_PUBLIC_API(void *) -HT_GetViewFEData (HT_View view) -{ - return view->pdata; -} - - - -PR_PUBLIC_API(void) -HT_SetViewFEData(HT_View view, void *data) -{ - view->pdata = data; -} - - - -PR_PUBLIC_API(void*) -HT_GetPaneFEData (HT_Pane pane) -{ - return pane->pdata; -} - - - -PR_PUBLIC_API(void) -HT_SetPaneFEData (HT_Pane pane, void* data) -{ - pane->pdata = data; -} - - - -PR_PUBLIC_API(void*) -HT_GetNodeFEData (HT_Resource node) -{ - return node->feData; -} - - - -PR_PUBLIC_API(void) -HT_SetNodeFEData (HT_Resource node, void* data) -{ - node->feData = data; -} - - - -#ifdef HT_PASSWORD_RTNS - - - -void -ht_SetPassword(HT_Resource node, char *newPassword) -{ - char *activePassword; - - XP_ASSERT(node != NULL); - XP_ASSERT(newPassword != NULL); - - if ((activePassword = RDF_GetSlotValue(node->view->pane->db, node->node, - gNavCenter->RDF_Password, RDF_STRING_TYPE, PR_FALSE, PR_TRUE)) != NULL) - { - RDF_Unassert(node->view->pane->db, node->node, - gNavCenter->RDF_Password, activePassword, RDF_STRING_TYPE); - freeMem(activePassword); - } - if ((newPassword != NULL) && (((char *)newPassword)[0] != '\0')) - { - RDF_Assert(node->view->pane->db, node->node, gNavCenter->RDF_Password, - newPassword, RDF_STRING_TYPE); - } - else - { - node->flags &= (~HT_PASSWORDOK_FLAG); - } -} - - - -PRBool -ht_hasPassword(HT_Resource node) -{ - char *activePassword; - PRBool hasPasswordFlag = PR_FALSE; - - if ((activePassword = RDF_GetSlotValue(node->view->pane->db, node->node, - gNavCenter->RDF_Password, RDF_STRING_TYPE, PR_FALSE, PR_TRUE)) != NULL) - { - if ((activePassword != NULL) && (activePassword[0] != '\0')) - { - hasPasswordFlag = PR_TRUE; - } - freeMem(activePassword); - } - return(hasPasswordFlag); -} - - - -PRBool -ht_checkPassword(HT_Resource node, PRBool alwaysCheck) -{ - char *activePassword, *userPassword, *name; - PRBool granted = PR_TRUE; - - XP_ASSERT(node != NULL); - XP_ASSERT(node->view != NULL); - XP_ASSERT(node->view->pane != NULL); - XP_ASSERT(node->view->pane->db != NULL); - XP_ASSERT(node->node != NULL); - - - if ((alwaysCheck == PR_FALSE) && (node->flags & HT_PASSWORDOK_FLAG)) return(granted); - - if ((activePassword = RDF_GetSlotValue(node->view->pane->db, node->node, - gNavCenter->RDF_Password, RDF_STRING_TYPE, PR_FALSE, PR_TRUE)) != NULL) - { - if ((activePassword != NULL) && (activePassword[0] != '\0')) - { - granted = PR_FALSE; - - if (!(name = HT_GetNodeName(node))) - { - name = resourceID(node->node); - } - - if ((userPassword = FE_PromptPassword(((MWContext *)gRDFMWContext(NULL)), - PR_smprintf(XP_GetString(RDF_ENTERPASSWORD), - name))) != NULL) - { - if (!strcmp(activePassword, userPassword)) - { - node->flags |= HT_PASSWORDOK_FLAG; - granted = PR_TRUE; - } - else - { - FE_Alert(((MWContext *)gRDFMWContext(NULL)), XP_GetString(RDF_MISMATCHPASSWORD)); - } - } - } - freeMem(activePassword); - } - return(granted); -} - - - -#endif - - - -PR_PUBLIC_API(HT_Error) -HT_SetSelectedView (HT_Pane pane, HT_View view) -{ - HT_Notification ns; -#if defined(WIN32) || defined(XP_MAC) - char *advertURL; -#endif - - XP_ASSERT(pane != NULL); - if (pane == NULL) return(HT_NoErr); - XP_ASSERT(pane->db != NULL); - - if (pane->selectedView != view) - { -#ifdef HT_PASSWORD_RTNS - if (view != NULL) - { - if (ht_hasPassword(view->top)) - { - if (ht_checkPassword(view->top, PR_FALSE) == PR_FALSE) return(HT_Err); - } - } -#endif - pane->selectedView = view; - if (view != NULL) - { - if (!HT_IsContainer(view->top)) return(HT_Err); - RDFUtil_SetDefaultSelectedView(view->top->node); - if (view->itemListCount == 0) - { - HT_SetOpenState(view->top, PR_TRUE); -#if defined(WIN32) || defined(XP_MAC) - advertURL = advertURLOfContainer(pane->db, view->top->node); - if (advertURL != NULL) - { -#ifndef HT_RAPTOR - XP_GetURLForView(view, advertURL); -#endif - freeMem(advertURL); - } -#endif - } - sendNotification(view->top, HT_EVENT_VIEW_SELECTED, - NULL, HT_COLUMN_UNKNOWN); - } - else - { - RDFUtil_SetDefaultSelectedView(NULL); - - /* - sendNotification() doesn't accept a NULL node, - so send the event directly from here - */ - - if (pane->mask & HT_EVENT_VIEW_SELECTED) - { - if ((ns = pane->ns) != NULL) - { - if (ns->notifyProc != NULL) - { - (*ns->notifyProc)(ns, NULL, - HT_EVENT_VIEW_SELECTED, NULL, 0L); - } - } - } - } - } - return(HT_NoErr); -} - - - -PR_PUBLIC_API(HT_View) -HT_GetSelectedView (HT_Pane pane) -{ - HT_View view = NULL; - - XP_ASSERT(pane != NULL); - - if (pane != NULL) - { - view = pane->selectedView; - } - return(view); -} - - - -PR_PUBLIC_API(HT_View) -HT_GetViewType (HT_Pane pane, HT_ViewType viewType) -{ - HT_Resource node; - HT_View view = NULL; - RDF_Resource resToFind = NULL; - - XP_ASSERT(pane != NULL); - - switch(viewType) - { - case HT_VIEW_BOOKMARK: - resToFind = gNavCenter->RDF_BookmarkFolderCategory; - break; - - case HT_VIEW_HISTORY: - resToFind = gNavCenter->RDF_History; - break; - - case HT_VIEW_SITEMAP: - resToFind = gNavCenter->RDF_Sitemaps; - break; - - case HT_VIEW_FILES: - resToFind = gNavCenter->RDF_LocalFiles; - break; - - case HT_VIEW_SEARCH: - resToFind = gNavCenter->RDF_Search; - break; - - default: - resToFind = NULL; - break; - } - if (resToFind != NULL) - { - view = pane->viewList; - while(view != NULL) - { - if ((node = HT_TopNode(view)) != NULL) - { - if (node->node == resToFind) - { - break; - } - } - view = view->next; - } - } - return(view); -} - - - -PR_PUBLIC_API(HT_Pane) -HT_GetPane (HT_View view) -{ - HT_Pane pane = NULL; - - XP_ASSERT(view != NULL); - - if (view != NULL) - { - pane = view->pane; - } - return(pane); -} - - - -PR_PUBLIC_API(void) -HT_TypeTo(HT_Pane pane, char *typed) -{ - HT_Resource node; - HT_View view; - uint32 count, loop; - char *name; - - XP_ASSERT(pane != NULL); - XP_ASSERT(typed != NULL); -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(typed)); -#endif - - if ((pane == NULL) || (typed == NULL)) return; - if ((view = HT_GetSelectedView(pane)) == NULL) return; - count = HT_GetItemListCount(view); - for (loop=0; loop= 0) - { - HT_SetSelection(node); - sendNotification(node, HT_EVENT_NODE_SCROLLTO, - NULL, HT_COLUMN_UNKNOWN); - break; - } - } - } -} - - - -/*******************************************************************************/ -/* Drag and Drop Stuff */ -/*******************************************************************************/ - - - -HT_DropAction -htLaunchSmartNode(HT_Resource dropTarget, char *fullURL) -{ - HT_DropAction dropAction = DROP_NOT_ALLOWED; - MWContext *context; - RDF_Resource postR; - char *data, *value, *url; - char *methodType = NULL, *resultType = NULL, *prompt = NULL; - char *postData = NULL, *postStr, *temp; - uint32 postIndex = 0; - PRBool freeURLFlag = PR_FALSE; - -#ifndef HT_RAPTOR - URL_Struct *urls; - - if (fullURL == NULL) - { - HT_GetNodeData (dropTarget, gNavCenter->RDF_prompt, HT_COLUMN_STRING, &prompt); - if (prompt == NULL) - { - return(DROP_NOT_ALLOWED); - } - if ((fullURL = FE_Prompt(XP_GetNavCenterContext(dropTarget->view->pane), prompt, "")) == NULL) - { - return(DROP_ABORTED); - } - if (fullURL[0] == '\0') - { - XP_FREE(fullURL); - return(DROP_ABORTED); - } - freeURLFlag = PR_TRUE; - } - context = XP_GetNavCenterContext(dropTarget->view->pane); - HT_GetNodeData (dropTarget, gNavCenter->RDF_methodType, HT_COLUMN_STRING, &methodType); - HT_GetNodeData (dropTarget, gNavCenter->RDF_resultType, HT_COLUMN_STRING, &resultType); - if ((context != NULL) && (resultType != NULL)) - { - if (!compareStrings(resultType, "TEXT/HTML")) - { - if ((methodType != NULL) && (!compareStrings(methodType, "POST"))) - { - if ((url = getBaseURL(fullURL)) != NULL) - { - temp = NET_Escape(url, URL_XPALPHAS); - freeMem(url); - url = temp; - } - do - { - /* retrieve "post[x]data" */ - if ((postStr = PR_smprintf("post%ludata", postIndex)) == NULL) break; - postR = RDF_GetResource(NULL, postStr, PR_TRUE); - XP_FREE(postStr); - if (postR == NULL) break; - data = NULL; - HT_GetNodeData (dropTarget, postR, HT_COLUMN_STRING, &data); - if (data == NULL) break; - - /* retrieve "post[x]value" */ - if ((postStr = PR_smprintf("post%luvalue", postIndex)) == NULL) break; - postR = RDF_GetResource(NULL, postStr, PR_TRUE); - XP_FREE(postStr); - if (postR == NULL) break; - value = NULL; - HT_GetNodeData (dropTarget, postR, HT_COLUMN_STRING, &value); - - ++postIndex; - - temp = PR_smprintf("%s%s%s=%s", - ((postData != NULL) ? postData : ""), - ((postData != NULL) ? "&" : ""), data, - ((value != NULL) ? value : ((url != NULL) ? url:""))); - if (postData != NULL) XP_FREE(postData); - postData = temp; - } while (PR_TRUE); - if ((urls = NET_CreateURLStruct(HT_GetNodeURL(dropTarget), - NET_NORMAL_RELOAD)) != NULL) - { - urls->post_data = postData; - urls->post_data_size = (postData != NULL) ? strlen(postData) : 0; - urls->post_headers = PR_smprintf("Content-type: application/x-www-form-urlencoded\r\nContent-length: %lu\r\n", - urls->post_data_size); - urls->method = URL_POST_METHOD; - NET_GetURL(urls, FO_CACHE_AND_PRESENT, context, NULL); - } - if (url != NULL) - { - XP_FREE(url); - } - } - else if ((methodType == NULL) || (!compareStrings(methodType, "GET"))) - { - url = PR_smprintf("%s%s", HT_GetNodeURL(dropTarget), fullURL); - if (url != NULL) - { - if ((urls = NET_CreateURLStruct(url, NET_NORMAL_RELOAD)) != NULL) - { - urls->method = URL_GET_METHOD; - NET_GetURL(urls, FO_CACHE_AND_PRESENT, context, NULL); - } - XP_FREE(url); - } - } - dropAction = COPY_MOVE_LINK; - } - else if (!compareStrings(resultType, "TEXT/RDF")) - { - /* XXX finish this - dropAction = COPY_MOVE_LINK; - */ - } - } - if (freeURLFlag == PR_TRUE) - { - if (fullURL != NULL) - { - XP_FREE(fullURL); - } - } -#endif - return(dropAction); -} - - - -HT_DropAction -dropOnSmartNode(HT_Resource dropTarget, HT_Resource dropObject, PRBool justAction) -{ - HT_DropAction dropAction = DROP_NOT_ALLOWED; - RDF_BT targetType; - RDF_BT objType; - char *resultType = NULL; - - targetType = resourceType(dropTarget->node); - objType = resourceType(dropObject->node); - HT_GetNodeData (dropTarget, gNavCenter->RDF_resultType, - HT_COLUMN_STRING, &resultType); - if (justAction) - { - if ((targetType == RDF_RT) && (objType == RDF_RT)) - { - if (resultType != NULL) - { - dropAction = COPY_MOVE_LINK; - } - } - } - else - { - if ((targetType == RDF_RT) && (objType == RDF_RT)) - { - if (resultType != NULL) - { - dropAction = htLaunchSmartNode(dropTarget, - getBaseURL(HT_GetNodeURL(dropObject))); - } - } - } - return(dropAction); -} - - - -HT_DropAction -dropOnSmartURL(HT_Resource dropTarget, char *objURL, PRBool justAction) -{ - HT_DropAction dropAction = DROP_NOT_ALLOWED; - RDF_BT targetType; - RDF_BT objType; - char *resultType = NULL; - - targetType = resourceType(dropTarget->node); - objType = urlResourceType(objURL); - HT_GetNodeData (dropTarget, gNavCenter->RDF_resultType, - HT_COLUMN_STRING, &resultType); - if (justAction) - { - if ((targetType == RDF_RT) && (objType == RDF_RT)) - { - if (resultType != NULL) - { - dropAction = COPY_MOVE_LINK; - } - } - } - else - { - if ((targetType == RDF_RT) && (objType == RDF_RT)) - { - if (resultType != NULL) - { - dropAction = htLaunchSmartNode(dropTarget, - getBaseURL(objURL)); - } - } - } - return(dropAction); -} - - - -HT_DropAction -dropOn (HT_Resource dropTarget, HT_Resource dropObject, PRBool justAction) -{ - HT_Resource elders, parent; - RDF_BT targetType; - RDF_BT objType; - -#ifdef XP_MAC - AEEventID actionType; - AEAddressDesc finderAddr = { typeNull, NULL }; - AEDescList selection = { typeNull, NULL }; - AliasHandle srcAliasH = NULL, destAliasH = NULL; - AppleEvent theEvent = { typeNull, NULL }, theReply = { typeNull, NULL }; - FSSpec srcFSS, destFSS; - OSErr err; - ProcessSerialNumber finderPSN = { 0, kNoProcess }; - char *errorMsg; -#endif - - if (dropTarget == NULL) return(DROP_NOT_ALLOWED); - if (dropObject == NULL) return(DROP_NOT_ALLOWED); - if (dropTarget == dropObject) return(DROP_NOT_ALLOWED); - - targetType = resourceType(dropTarget->node); - objType = resourceType(dropObject->node); - - if (!containerp(dropTarget->node) && (targetType != PMF_RT)) - { - return dropOnSmartNode(dropTarget, dropObject, justAction); - } - if (objType == HISTORY_RT) return(DROP_NOT_ALLOWED); - - /* disallow dropping a parent folder into itself or a child folder */ - elders = dropTarget; - while (elders != NULL) - { - if (elders == dropObject) return(DROP_NOT_ALLOWED); - if (elders->node == dropObject->node) return(DROP_NOT_ALLOWED); - elders = elders->parent; - } - - switch (targetType) - { - case SEARCH_RT: - case HISTORY_RT: - return(DROP_NOT_ALLOWED); - break; - -#ifdef SMART_MAIL - case PMF_RT: - if (objType != PM_RT) return(DROP_NOT_ALLOWED); - if (justAction) return (COPY_MOVE_CONTENT); - MoveMessage(resourceID(dropTarget->node), resourceID(dropObject->parent->node), - dropObject->node->pdata); - break; -#endif - case LFS_RT: -#ifdef XP_WIN32FS - if (objType == LFS_RT) - { - if (justAction) - { - return COPY_MOVE_CONTENT; - } - else - { - parent = dropObject->parent; - Win32FileCopyMove(dropTarget, dropObject); - destroyViewInt(dropTarget, PR_FALSE); - refreshItemList (dropTarget, HT_EVENT_VIEW_REFRESH); - destroyViewInt(parent, PR_FALSE); - refreshItemList (parent, HT_EVENT_VIEW_REFRESH); - return COPY_MOVE_CONTENT; - } - } - else - return DROP_NOT_ALLOWED; -#elif XP_MAC - if (objType == LFS_RT) - { - if (justAction) - { - return COPY_MOVE_CONTENT; - } - else - { - parent = dropObject->parent; - - if ((err = nativeMacPathname(resourceID(dropObject->node), &srcFSS)) != noErr) {} - else if ((err = nativeMacPathname(resourceID(dropTarget->node), &destFSS)) != noErr) {} - else if ((err = NewAliasMinimal(&srcFSS, &srcAliasH)) != noErr) {} - else if ((err = NewAliasMinimal(&destFSS, &destAliasH)) != noErr) {} - else - { - if (srcAliasH != NULL) HLock((Handle)srcAliasH); - if (destAliasH != NULL) HLock((Handle)srcAliasH); - actionType = (srcFSS.vRefNum == destFSS.vRefNum) ? kAEMove : kAEDrag; - } - - if (err) {} - else if ((err = getPSNbyTypeSig(&finderPSN, 'FNDR', 'MACS')) != noErr) {} - else if ((err = AECreateDesc(typeProcessSerialNumber, &finderPSN, - sizeof(ProcessSerialNumber), &finderAddr)) != noErr) {} - else if ((err = AECreateAppleEvent(kAEFinderEvents /* kAEFinderSuite */, - actionType, &finderAddr, kAutoGenerateReturnID, - kAnyTransactionID, &theEvent)) != noErr) {} - else if ((err = AECreateList (NULL, 0, PR_FALSE, &selection)) != noErr) {} - else if ((err = AEPutPtr (&selection, 0, typeAlias, *srcAliasH, GetHandleSize((Handle)srcAliasH))) != noErr) {} - else if ((err = AEPutParamDesc (&theEvent, keySelection, &selection)) != noErr) {} - else if ((err = AEPutParamPtr (&theEvent, keyDirectObject, typeAlias, *destAliasH, GetHandleSize((Handle)destAliasH))) != noErr) {} - else err = AESend (&theEvent, &theReply, - (kAENoReply | kAEAlwaysInteract | kAECanInteract | kAECanSwitchLayer), - kAENormalPriority, kAEDefaultTimeout, NULL, NULL); - - if (err == noErr) - { - /* SetFrontProcess(&finderPSN); */ - } - else - { - if ((errorMsg = PR_smprintf("Error %d", (int)err)) != NULL) - { - FE_Alert(NULL, errorMsg); - XP_FREE(errorMsg); - } - } - - if (srcAliasH != NULL) DisposeHandle((Handle)srcAliasH); - if (destAliasH != NULL) DisposeHandle((Handle)destAliasH); - if (finderAddr.dataHandle != NULL) AEDisposeDesc(&finderAddr); - if (selection.dataHandle != NULL) AEDisposeDesc (&selection); - if (theEvent.dataHandle != NULL) AEDisposeDesc(&theEvent); - if (theReply.dataHandle != NULL) AEDisposeDesc(&theReply); - - /* magic */ - - destroyViewInt(dropTarget, PR_FALSE); - refreshItemList (dropTarget, HT_EVENT_VIEW_REFRESH); - if (dropTarget->view != parent->view) - { - destroyViewInt(parent, PR_FALSE); - refreshItemList (parent, HT_EVENT_VIEW_REFRESH); - } - return COPY_MOVE_CONTENT; - } - } - else - return DROP_NOT_ALLOWED; -#else - return DROP_NOT_ALLOWED; -#endif - break; - - case FTP_RT: - case ES_RT: - if ((objType == ES_RT) || (objType == FTP_RT)) - { - if (justAction) - { - return COPY_MOVE_CONTENT; - } - else - { - return esfsCopyMoveContent(dropTarget, dropObject); - } - } - else if (containerp(dropObject->node) && (objType == RDF_RT)) - { - if (justAction) - { - return UPLOAD_RDF; - } - else - { - return uploadRDFFile(dropTarget, dropObject); - } - } - else if (objType == LFS_RT) - { - if (justAction) - { - return UPLOAD_LFS; - } - else - { - return uploadLFS(dropTarget, dropObject); - } - } - return DROP_NOT_ALLOWED; - break; - - case LDAP_RT: - return DROP_NOT_ALLOWED; - break; - - case RDF_RT : - if (justAction) - { - if (HT_IsLocalData(dropTarget)) - { - return COPY_MOVE_LINK; - } - else - { - return DROP_NOT_ALLOWED; - } - } - else - { - return copyMoveRDFLink(dropTarget, dropObject); - } - } - return DROP_NOT_ALLOWED; -} - - - -#ifdef XP_WIN32FS - -/* We forgot we were not supposed to implement this */ - -#include "windows.h" -#include "xp_file.h" -#include "shellapi.h" - -void -Win32FileCopyMove(HT_Resource dropTarget, HT_Resource dropObject) -{ - char *from = resourceID(dropObject->node); - char *to = resourceID(dropTarget->node); - char *lffrom; - char *lfto; - char *finalFrom; - char *finalTo; - size_t fl,ft; - SHFILEOPSTRUCT action; - - memset(&action, 0, sizeof(action)); - XP_ConvertUrlToLocalFile(from, &lffrom) ; - XP_ConvertUrlToLocalFile(to, &lfto); - - fl = strlen(lffrom); - ft = strlen(lfto); - - finalFrom = (char *)getMem(fl+2); - finalTo = (char *)getMem(ft+2); - - strcpy(finalFrom, lffrom); - strcpy(finalTo, lfto); - - finalFrom[fl+1] = '\0'; - finalTo[ft+1] = '\0'; - - action.hwnd = NULL; - action.wFunc = (from[8] == to[8] ? FO_MOVE : FO_COPY); - action.pFrom = finalFrom; - action.pTo = finalTo; - action.fFlags = FOF_ALLOWUNDO; - - SHFileOperation(&action); - - freeMem(finalFrom); - freeMem(finalTo); - -} -#endif - - - -HT_DropAction -copyMoveRDFLink (HT_Resource dropTarget, HT_Resource dropObject) -{ - HT_Resource origin; - RDF db; - RDF_Resource old,new,obj; - PRBool moveAction; - char *name; - - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(dropObject != NULL); - if ((dropTarget == NULL) || (dropObject == NULL)) return(DROP_NOT_ALLOWED); - - origin = dropObject->parent; - db = dropObject->view->pane->db; - moveAction = ((origin != NULL) && - (origin->view->top->node == dropTarget->view->top->node)); - old = (origin == NULL ? NULL : origin->node); - new = dropTarget->node; - obj = dropObject->node; - name = RDF_GetSlotValue(db, obj, gCoreVocab->RDF_name, RDF_STRING_TYPE, 0, 1); - if (name != NULL) - { - RDF_Assert(db, obj, gCoreVocab->RDF_name, name, RDF_STRING_TYPE); - freeMem(name); - } - - /* drag&drops between personal toolbar and bookmark view should be a move action */ - if ((!moveAction) && (origin != NULL)) - { - if ((origin->view->pane->personaltoolbar == PR_TRUE && - dropTarget->view->top->node == gNavCenter->RDF_BookmarkFolderCategory) || - ((dropTarget->view->pane->personaltoolbar == PR_TRUE && - origin->view->top->node == gNavCenter->RDF_BookmarkFolderCategory))) - { - moveAction = PR_TRUE; - } - } - - - /* ensure object can copy/move, and target accepts additions */ - if (htIsOpLocked(dropObject, ((moveAction) ? - gNavCenter->RDF_MoveLock : gNavCenter->RDF_CopyLock))) - { - return(DROP_NOT_ALLOWED); - } - if (htIsOpLocked(dropTarget, gNavCenter->RDF_AddLock)) - { - return(DROP_NOT_ALLOWED); - } - - if (moveAction && old) - { - RDF_Unassert(db, obj, gCoreVocab->RDF_parent, old, RDF_RESOURCE_TYPE); - } - RDF_Assert(db, obj, gCoreVocab->RDF_parent, new, RDF_RESOURCE_TYPE); - return COPY_MOVE_LINK; -} - - - -HT_DropAction -copyMoveRDFLinkAtPos (HT_Resource dropx, HT_Resource dropObject, PRBool before) -{ - HT_Resource child, origin, dropTarget, prev; - RDF db; - RDF_Resource old, parent, obj, posResource; - PRBool moveAction; - char *name, *id, *pos, posString[16]; - uint32 itemNum, itemPos=0; - - if (dropx == NULL) return(DROP_NOT_ALLOWED); - if (dropObject == NULL) return(DROP_NOT_ALLOWED); - - origin = dropObject->parent; - dropTarget = dropx->parent; - db = dropObject->view->pane->db; - moveAction = ((origin != NULL) && - (origin->view->top->node == dropTarget->view->top->node)); - old = (origin == NULL ? NULL : origin->node); - parent = dropTarget->node; - obj = dropObject->node; - name = RDF_GetSlotValue(db, obj, gCoreVocab->RDF_name, RDF_STRING_TYPE, 0, 1); - if (name != NULL) - { - RDF_Assert(db, obj, gCoreVocab->RDF_name, copyString(name), RDF_STRING_TYPE); - freeMem(name); - } - - /* drag&drops between personal toolbar and bookmark view should be a move action */ - if ((!moveAction) && (origin != NULL)) - { - if ((origin->view->pane->personaltoolbar == PR_TRUE && - dropTarget->view->top->node == gNavCenter->RDF_BookmarkFolderCategory) || - ((dropTarget->view->pane->personaltoolbar == PR_TRUE && - origin->view->top->node == gNavCenter->RDF_BookmarkFolderCategory))) - { - moveAction = PR_TRUE; - } - } - - - /* ensure object can copy/move, and target accepts additions */ - if (htIsOpLocked(dropObject, ((moveAction) ? - gNavCenter->RDF_MoveLock : gNavCenter->RDF_CopyLock))) - { - return(DROP_NOT_ALLOWED); - } - if (htIsOpLocked(dropTarget, gNavCenter->RDF_AddLock)) - { - return(DROP_NOT_ALLOWED); - } - - if (moveAction && old) - { - RDF_Unassert(db, obj, gCoreVocab->RDF_parent, old, RDF_RESOURCE_TYPE); - } -/* remoteUnassert(gLocalStore, obj, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE); - remoteAddChildAt(gLocalStore, parent, dropx->node, obj, before); -*/ - if (!RDF_HasAssertion(db, obj, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE, PR_TRUE)) - { - RDF_Assert(db, obj, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE); - } - - /* renumber item positions, leaving an open slot for the node being added */ - if ((id = PR_smprintf("pos(%s)", resourceID(parent))) != NULL) - { - posResource = RDF_GetResource(db, id, PR_TRUE); - itemNum = 1; - child = dropTarget->child; - while (child != NULL) - { - pos = remoteStoreGetSlotValue(gLocalStore, child->node, posResource, RDF_STRING_TYPE, PR_FALSE, PR_TRUE); - if (pos != NULL) - { - remoteUnassert(gLocalStore, child->node, posResource, pos, RDF_STRING_TYPE); - freeMem(pos); - } - if ((child == dropx) && (before)) - { - itemPos = itemNum++; - sprintf(posString, "%lu", itemNum++); - remoteAssert(gLocalStore, child->node, posResource, posString, RDF_STRING_TYPE, PR_TRUE); - } - else if ((prev == dropx) && (!before)) - { - sprintf(posString, "%lu", itemNum++); - remoteAssert(gLocalStore, child->node, posResource, posString, RDF_STRING_TYPE, PR_TRUE); - itemPos = itemNum++; - } - else if (child->node != obj) - { - sprintf(posString, "%lu", itemNum++); - remoteAssert(gLocalStore, child->node, posResource, posString, RDF_STRING_TYPE, PR_TRUE); - } - prev = child; - child = child->next; - } - sprintf(posString, "%lu", (itemPos > 0) ? itemPos : dropx->parent->numChildren + 1); - remoteAssert(gLocalStore, obj, posResource, posString, RDF_STRING_TYPE, PR_TRUE); - XP_FREE(id); - } - return COPY_MOVE_LINK; -} - - - -HT_DropAction -uploadLFS (HT_Resource dropTarget, HT_Resource dropObject) -{ - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(dropObject != NULL); - - if ((dropTarget != NULL) && (dropObject != NULL)) - { - RDF_Assert(gNCDB, dropObject->node, gCoreVocab->RDF_parent, - dropTarget->node, RDF_RESOURCE_TYPE); - } - return 0; -} - - - -HT_DropAction -uploadRDFFile (HT_Resource dropTarget, HT_Resource dropObject) -{ - return 0; -} - - - -HT_DropAction -esfsCopyMoveContent (HT_Resource dropTarget, HT_Resource dropObject) -{ - return 0; -} - - - -RDF_BT -urlResourceType (char* url) -{ - if (startsWith("file:", url)) return LFS_RT; - return RDF_RT; -} - - - -HT_DropAction -dropURLOn (HT_Resource dropTarget, char* objURL, char *objTitle, PRBool justAction) -{ - RDF_BT targetType; - RDF_BT objType; - - if (dropTarget == NULL) return(DROP_NOT_ALLOWED); - if (objURL == NULL) return(DROP_NOT_ALLOWED); - - targetType = resourceType(dropTarget->node); - objType = urlResourceType(objURL); - - if (!containerp(dropTarget->node)) - { - return dropOnSmartURL(dropTarget, objTitle, justAction); - } - if (objType == HISTORY_RT) return DROP_NOT_ALLOWED; - - switch (targetType) - { - case LFS_RT: - case SEARCH_RT: - case HISTORY_RT: - return 0; - break; - - case FTP_RT: - case ES_RT: - if ((objType == ES_RT) || (objType == FTP_RT)) - { - if (justAction) - { - return COPY_MOVE_CONTENT; - } - else - { - return esfsCopyMoveContentURL(dropTarget, objURL); - } - } - else if (0 /*containerp(objURL) can never be PR_TRUE */ && (objType == RDF_RT)) - { - if (justAction) - { - return UPLOAD_RDF; - } - else - { - return uploadRDFFileURL(dropTarget, objURL); - } - } - else if (objType == LFS_RT) - { - if (justAction) - { - return UPLOAD_LFS; - } - else - { - return uploadLFSURL(dropTarget, objURL); - } - } - return DROP_NOT_ALLOWED; - break; - - case LDAP_RT: - return DROP_NOT_ALLOWED; - break; - - case RDF_RT : - if (justAction) - { - return COPY_MOVE_LINK; - } - else - { - return copyRDFLinkURL(dropTarget, objURL, objTitle); - } - } - return DROP_NOT_ALLOWED; -} - - - -void -replacePipeWithColon(char* url) -{ - size_t n=0, size; - - XP_ASSERT(url != NULL); - - size = strlen(url); - n = 0; - while (n < size) - { - if (url[n] == '|') - { - url[n] = ':'; - } - n++; - } -} - - - -HT_DropAction -copyRDFLinkURL (HT_Resource dropTarget, char* objURL, char *objTitle) -{ - RDF_Resource new, obj, posResource; - RDF db; - char *id, itemPos[16]; - - new = dropTarget->node; - db = dropTarget->view->pane->db; - replacePipeWithColon(objURL); - obj = RDF_GetResource(db, objURL, 1); - - if (objTitle != NULL) - { - RDF_Assert(db, obj, gCoreVocab->RDF_name, objTitle, RDF_STRING_TYPE); - } - - if (dropTarget->child != NULL) - { - if ((id = PR_smprintf("pos(%s)", resourceID(new))) != NULL) - { - posResource = RDF_GetResource(db, id, PR_TRUE); - sprintf(itemPos, "%lu", dropTarget->numChildren+1); - RDF_Assert(db, obj, posResource, itemPos, RDF_STRING_TYPE); - XP_FREE(id); - } - } - RDF_Assert(db, obj, gCoreVocab->RDF_parent, new, RDF_RESOURCE_TYPE); - /* htLookInCacheForMetaTags(objURL); */ - return COPY_MOVE_LINK; -} - - - -HT_DropAction -copyRDFLinkURLAt (HT_Resource dropx, char* objURL, char *objTitle, PRBool before) -{ - HT_Resource dropTarget, child, prev = NULL; - RDF db; - RDF_Resource parent, obj, posResource; - char *id, *pos, posString[16]; - unsigned long itemNum, itemPos=0; - - XP_ASSERT(dropx != NULL); - if (dropx == NULL) return(DROP_NOT_ALLOWED); - - dropTarget = dropx->parent; - db = dropTarget->view->pane->db; - parent = dropTarget->node; - replacePipeWithColon(objURL); - obj = RDF_GetResource(db, objURL, 1); - - if (objTitle != NULL) - { - RDF_Assert(db, obj, gCoreVocab->RDF_name, objTitle, RDF_STRING_TYPE); - } - - remoteUnassert(gLocalStore, obj, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE); - /* renumber item positions, leaving an open slot for the node being added */ - if ((id = PR_smprintf("pos(%s)", resourceID(parent))) != NULL) - { - posResource = RDF_GetResource(db, id, PR_TRUE); - itemNum = 1; - child = dropTarget->child; - while (child != NULL) - { - pos = NULL; - HT_GetNodeData(child, posResource, HT_COLUMN_STRING, &pos); - if (pos != NULL) - { - RDF_Unassert(gNCDB, child->node, posResource, pos, RDF_STRING_TYPE); - } - - if ((child == dropx) && (before)) - { - itemPos = itemNum++; - sprintf(posString, "%lu", itemNum++); - RDF_Assert(gNCDB, child->node, posResource, posString, RDF_STRING_TYPE); - } - else if ((prev == dropx) && (!before)) - { - sprintf(posString, "%lu", itemNum++); - RDF_Assert(gNCDB, child->node, posResource, posString, RDF_STRING_TYPE); - itemPos = itemNum++; - } - else - { - sprintf(posString, "%lu", itemNum++); - RDF_Assert(gNCDB, child->node, posResource, posString, RDF_STRING_TYPE); - } - prev = child; - child = child->next; - } - sprintf(posString, "%lu", (itemPos > 0) ? itemPos : dropx->parent->numChildren + 1); - RDF_Assert(gNCDB, obj, posResource, posString, RDF_STRING_TYPE); - /* - nlocalStoreAddChildAt(gLocalStore, parent, dropx->node, obj, before); - */ - RDF_Assert(db, obj, gCoreVocab->RDF_parent, parent, RDF_RESOURCE_TYPE); - XP_FREE(id); - } - /* htLookInCacheForMetaTags(objURL); */ - return (COPY_MOVE_LINK); -} - - - -HT_DropAction -uploadLFSURL (HT_Resource dropTarget, char* objURL) -{ - RDF_Resource r; - - XP_ASSERT(dropTarget != NULL); - XP_ASSERT(objURL != NULL); - - if ((dropTarget != NULL) && (objURL != NULL)) - { - if ((r = RDF_GetResource(gNCDB, objURL, 1)) != NULL) - { - RDF_Assert(gNCDB, r, gCoreVocab->RDF_parent, - dropTarget->node, RDF_RESOURCE_TYPE); - } - } - return 0; -} - - - -HT_DropAction -uploadRDFFileURL (HT_Resource dropTarget, char* objURL) -{ - return 0; -} - - - -HT_DropAction -esfsCopyMoveContentURL (HT_Resource dropTarget, char* objURL) -{ - return 0; -} - - - -PR_PUBLIC_API(RDF) -RDF_GetNavCenterDB() -{ - return gNCDB; -} - - - -RDFT -HTADD(HT_Pane pane, RDF_Resource u, RDF_Resource s, void *v) -{ - RDF_ValueType type = ((s == gCoreVocab->RDF_parent) ? RDF_RESOURCE_TYPE : RDF_STRING_TYPE); - if (!pane->htdb) return NULL; - remoteStoreAdd(pane->htdb, u, s, v, type, 1); - if ((s == gCoreVocab->RDF_parent) && (containerp(u))) - { - return RDF_AddDataSource(pane->db, resourceID(u)); - } - return NULL; -} - - - -HT_URLSiteMapAssoc * -makeNewSMP (HT_Pane htPane, char* pUrl, char* sitemapUrl) -{ - HT_URLSiteMapAssoc *nm; - HT_URLSiteMapAssoc *nsmp = htPane->smp; - while (nsmp != NULL) { - if (stringEquals(nsmp->url, pUrl) && stringEquals(nsmp->url, sitemapUrl)) return nsmp; - nsmp = nsmp->next; - } - - if ((nm = (HT_URLSiteMapAssoc*)getMem(sizeof(HT_URLSiteMapAssoc))) != NULL) - { - nm->sitemapUrl = copyString(sitemapUrl); - nm->url = copyString(pUrl); - - } - return(nm); -} - - - -PR_PUBLIC_API(void) -HT_AddSitemapFor(HT_Pane htPane, char *pUrl, char *pSitemapUrl, char* name) -{ - HT_URLSiteMapAssoc *nsmp; - RDF_Resource nu; - RDFT sp; - char *nm; - -#ifndef HT_RAPTOR - XP_ASSERT( IsUTF8String(name)); -#endif - sp = htPane->htdb; - if (sp == NULL) return; - nu = RDF_GetResource(htPane->db, pSitemapUrl, 1); - nsmp = makeNewSMP(htPane, pUrl, pSitemapUrl); - nsmp->sitemap = nu; - nsmp->next = htPane->smp; - htPane->smp = nsmp; - if (name != NULL) { - nm = copyString(name); - } - else { -#ifndef HT_RAPTOR - nm = copyString(XP_GetString(RDF_SITEMAPNAME)); -#else - nm = copyString("Sitemap"); -#endif - } - nsmp->siteToolType = RDF_SITEMAP; - if (name) nsmp->name = copyString(name); - nsmp->sitemapUrl = copyString(pSitemapUrl); - - setContainerp(nu, 1); - - nsmp->origin = FROM_PAGE; - nsmp->onDisplayp = 1; - HTADD(htPane, nu, gCoreVocab->RDF_name, nm); - nsmp->db = HTADD(htPane, nu, gCoreVocab->RDF_parent, gNavCenter->RDF_Sitemaps); - - -} - - - -void -RetainOldSitemaps (HT_Pane htPane, char *pUrl) -{ - HT_URLSiteMapAssoc *nsmp; - RDFT sp; - - sp = htPane->htdb; - if (sp == NULL) return; - nsmp = htPane->smp; - while (nsmp != NULL) { - if ((nsmp->siteToolType == RDF_SITEMAP)) { - if (startsWith(nsmp->url, pUrl) && - (!startsWith("file:", nsmp->url))) - { - if (!nsmp->onDisplayp) { - RDF_Resource nu = RDF_GetResource(htPane->db, nsmp->sitemapUrl, 1); - nsmp->sitemap = nu; - nsmp->origin = GUESS_FROM_PREVIOUS_PAGE; - nsmp->onDisplayp = 1; - HTADD(htPane, nu, gCoreVocab->RDF_name, copyString(nsmp->name)); - nsmp->db = HTADD(htPane, nu, gCoreVocab->RDF_parent, gNavCenter->RDF_Sitemaps); - } - } else if (nsmp->onDisplayp) { - HTDEL(sp, nsmp->sitemap, gCoreVocab->RDF_parent, - gNavCenter->RDF_Sitemaps, RDF_RESOURCE_TYPE); - if (nsmp->db) { - RDF_ReleaseDataSource(htPane->db, nsmp->db); - nsmp->db = NULL; - } - nsmp->onDisplayp = 0; - } - } - nsmp = nsmp->next; - } -} - - - -void -cleanupInt (HT_Pane htPane, HT_URLSiteMapAssoc *nsmp, RDF_Resource parent) -{ - while (nsmp != NULL) { - HT_URLSiteMapAssoc *next; - HTDEL(htPane->htdb, nsmp->sitemap, gCoreVocab->RDF_parent, - parent, RDF_RESOURCE_TYPE); - if (nsmp->db) { - RDF_ReleaseDataSource(htPane->db, nsmp->db); - nsmp->db = NULL; - } - next = nsmp->next; - freeMem(nsmp->url); - freeMem(nsmp->sitemapUrl); - freeMem(nsmp); - nsmp = next; - } -} - - - -void -PaneDeleteSBPCleanup (HT_Pane htPane) -{ - cleanupInt(htPane, htPane->sbp, gNavCenter->RDF_Sitemaps); - cleanupInt(htPane, htPane->smp, gNavCenter->RDF_Sitemaps); - freeMem(htPane->windowURL); - htPane->windowURL = NULL; - htPane->sbp = NULL; - htPane->smp = NULL; -} - - - -PR_PUBLIC_API(void) -HT_ExitPage(HT_Pane htPane, char *pUrl) -{ - cleanupInt(htPane, htPane->sbp, gNavCenter->RDF_Sitemaps); - freeMem(htPane->windowURL); - htPane->windowURL = NULL; - htPane->sbp = NULL; -} - - - -void -populateSBProviders (HT_Pane htPane) -{ - RDF_Cursor c; - RDF_Resource prov; - RDF db; - SBProvider sb; - - XP_ASSERT(htPane != NULL); - - db = htPane->db; - c = RDF_GetSources(htPane->db, gNavCenter->RDF_SBProviders, - gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, 1); - while ((prov = RDF_NextValue(c)) != NULL) - { - sb = (SBProvider)getMem(sizeof(SBProviderStruct)); - sb->name = RDF_GetResourceName(db, prov); - sb->url = copyString(resourceID(prov)); - sb->containerp = (!RDF_HasAssertion(db, prov, gNavCenter->RDF_resultType, - "TEXT/HTML", RDF_STRING_TYPE, 1)); - sb->next = htPane->smartBrowsingProviders; - htPane->smartBrowsingProviders = sb; - } - RDF_DisposeCursor(c); -} - - - -SBProvider -SBProviderOfNode (HT_Resource node) -{ - HT_Pane htPane; - SBProvider prov; - - XP_ASSERT(node != NULL); - - htPane = node->view->pane; - prov = htPane->smartBrowsingProviders; - while (prov) - { - if (startsWith(prov->url, resourceID(node->node))) - { - return prov; - } - prov = prov->next; - } - return NULL; -} - - - -PRBool -implicitDomainURL (char* url) -{ - uint16 n = 7, size; - - XP_ASSERT(url != NULL); - - size = strlen(url); - while (n < size) - { - if (url[n] == '/') return 1; - if (url[n] == '.') return 0; - n++; - } - return 1; -} - - - -PRBool -domainMatches (char *dom, char *url) -{ - size_t n = 0, m = 0, ns, ms; - - XP_ASSERT(dom != NULL); - XP_ASSERT(url != NULL); - - ns = strlen(dom); - ms = strlen(url); - while ((n < ns) && (m < ms)) - { - if (dom[n] == '*') - { - n++; - while (m < ms) - { - if (url[m] == '.') break; - m++; - } - } - else if (url[m] == '/') - { - return 0; - } - else if (url[m] != dom[n]) - { - return 0; - } - else - { - m++; - n++; - } - } - return 1; -} - - - -void -nextDomain (char* dom, size_t *n) -{ - PRBool somethingSeenp = 0; - size_t m = 0; - uint16 ns; - char c; - - ns = strlen(gRLForbiddenDomains); - memset(dom, '\0', 100); - while (*n < ns) - { - c = gRLForbiddenDomains[*n]; - if (c != ' ') somethingSeenp = 1; - if (c == ',') - { - *n= (*n)+1; - return; - } - if (somethingSeenp) dom[m++] = c; - *n = (*n)+1; - } -} - - - -PRBool -relatedLinksEnabledURL (char* url) -{ - size_t n = 0, ns; - char dom[100]; - - if (url == NULL) return 0; - if (strlen(url) > 100) return 0; - if (!startsWith("http:", url)) - { - return 0; - } - else if (implicitDomainURL(url)) - { - return 0; - } - else if (gRLForbiddenDomains != NULL) - { - ns = strlen(gRLForbiddenDomains); - while (n < ns) - { - nextDomain(dom, &n); - if (dom[0] != '\0' && domainMatches(dom, &url[7])) - { - return 0; - } - } - return 1; - } - else return 1; -} - - - -PR_PUBLIC_API(void) -HT_AddRelatedLinksFor(HT_Pane htPane, char *pUrl) -{ - HT_URLSiteMapAssoc *nsmp; - RDF_Resource nu; - RDFT sp; - SBProvider prov; - char *buffer; - - - sp = htPane->htdb; - if (!sp) return; - if (!htPane->smartBrowsingProviders) populateSBProviders(htPane); - if (!relatedLinksEnabledURL(pUrl)) return; - prov = htPane->smartBrowsingProviders; - while (prov) - { - buffer = getMem(strlen(prov->url) + strlen(pUrl)); - sprintf(buffer, "%s%s", prov->url, &pUrl[7]); - nu = RDF_GetResource(htPane->db, buffer, 1); - setContainerp(nu, prov->containerp); - setResourceType(nu, RDF_RT); - nsmp = makeNewSMP(htPane, pUrl, buffer); - nsmp->sitemap = nu; - nsmp->next = htPane->sbp; - htPane->sbp = nsmp; - nsmp->siteToolType = RDF_RELATED_LINKS; - HTADD(htPane, nu, gCoreVocab->RDF_name, copyString(prov->name)); - nsmp->db = HTADD(htPane, nu, gCoreVocab->RDF_parent, gNavCenter->RDF_Sitemaps); - prov = prov->next; - freeMem(buffer); - } - htPane->windowURL = copyString(pUrl); - RetainOldSitemaps(htPane, pUrl); - -} - - - - -PR_PUBLIC_API(PRBool) -HT_HasHTMLPane(HT_View htView) -{ - HT_Resource top; - PRBool hasHTML = PR_FALSE; - char *url = NULL; - - XP_ASSERT(htView != NULL); - - if (htView != NULL) - { - if ((top = HT_TopNode(htView)) != NULL) - { - HT_GetTemplateData (top, gNavCenter->RDF_HTMLURL, HT_COLUMN_STRING, (void *)&url); - if (url != NULL) - { - hasHTML = PR_TRUE; - } - } - } - return(hasHTML); -} - - - -PR_PUBLIC_API(char *) -HT_HTMLPaneHeight(HT_View htView) -{ - HT_Resource top; - PRBool hasHTML = PR_FALSE; - char *paneHeightStr = NULL; - - XP_ASSERT(htView != NULL); - - if (htView != NULL) - { - if (HT_HasHTMLPane(htView)) - { - if ((top = HT_TopNode(htView)) != NULL) - { - HT_GetTemplateData (top, gNavCenter->RDF_HTMLHeight, HT_COLUMN_STRING, (void *)&paneHeightStr); - } - } - } - return(paneHeightStr); -} - diff --git a/mozilla/rdf/src/ht.h b/mozilla/rdf/src/ht.h deleted file mode 100644 index 811652ea6e3..00000000000 --- a/mozilla/rdf/src/ht.h +++ /dev/null @@ -1,399 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef _RDF_HT_H_ -#define _RDF_HT_H_ - -#define HT_RAPTOR 1 - -#ifndef HT_RAPTOR -#include "xpassert.h" -#include "xp_qsort.h" -#include "xp_time.h" -#include "client.h" -#include "net.h" -#include "xpgetstr.h" -#include "xp_str.h" -#include "htmldlgs.h" -#include "xp_ncent.h" -#include "xpassert.h" -#include "nspr.h" -#include "prefapi.h" -#include "fe_proto.h" -#include "intl_csi.h" - -#ifdef XP_MAC -#include "stdlib.h" -#include -#endif - -#include "rdf.h" -#include "rdf-int.h" -#include "math.h" -#include "htrdf.h" - -#ifdef SMART_MAIL -#include "pm2rdf.h" -#endif - -#else -#include "prprf.h" -#include "plhash.h" -#include "nspr.h" -#include "rdf.h" -#include "rdf-int.h" -#include "core.h" -#include "htrdf.h" -#include "vocab.h" - -#ifndef XP_ASSERT -#define XP_ASSERT(x) -#endif - -#ifndef XP_FREE -#define XP_FREE(x) PR_Free((x)) -#endif - -#ifndef XP_STRCASECMP -#define XP_STRCASECMP(x,y) strcmp((x),(y)) -#endif - -#define MWContext void -#endif - - -/* HT data structures and defines */ - -#define ITEM_LIST_SIZE 500 /* XXX ITEM_LIST_SIZE should be dynamic */ -#define ITEM_LIST_ELEMENT_SIZE 20 - -#define NUM_MENU_CMDS 40 - -#define RDF_SITEMAP 1 -#define RDF_RELATED_LINKS 2 -#define FROM_PAGE 1 -#define GUESS_FROM_PREVIOUS_PAGE 2 - -#define HTDEL remoteStoreRemove - -#ifndef HT_RAPTOR - /* external string references in allxpstr */ -extern int RDF_HTML_STR, RDF_HTML_STR_1, RDF_HTML_STR_2, RDF_HTML_STR_3; -extern int RDF_HTML_STR_4, RDF_HTML_STR_5, RDF_HTML_STR_NUMBER; -extern int RDF_HTML_WINDATE, RDF_HTML_MACDATE, RDF_CMD_0, RDF_DATA_1, RDF_DATA_2; -extern int RDF_DELETEFILE, RDF_UNABLETODELETEFILE, RDF_DELETEFOLDER; -extern int RDF_UNABLETODELETEFOLDER, RDF_SITEMAPNAME; -extern int RDF_RELATEDLINKSNAME, RDF_DEFAULTCOLUMNNAME; -extern int RDF_NEWWORKSPACEPROMPT, RDF_DELETEWORKSPACE; -extern int RDF_ADDITIONS_ALLOWED, RDF_DELETION_ALLOWED; -extern int RDF_ICON_URL_LOCKED, RDF_NAME_LOCKED, RDF_COPY_ALLOWED; -extern int RDF_MOVE_ALLOWED, RDF_WORKSPACE_POS_LOCKED; -extern int RDF_MAIN_TITLE, RDF_COLOR_TITLE, RDF_HTML_INFOHEADER_STR; -extern int RDF_MISSION_CONTROL_TITLE, RDF_TREE_COLORS_TITLE, RDF_SELECTION_COLORS_TITLE; -extern int RDF_COLUMN_COLORS_TITLE, RDF_TITLEBAR_COLORS_TITLE, RDF_HTML_MAININFOHEADER_STR; -extern int RDF_HTML_EMPTYHEADER_STR, RDF_HTML_COLOR_STR, RDF_SETCOLOR_JS, RDF_DEFAULTCOLOR_JS; -extern int RDF_COLOR_LAYER, RDF_HTMLCOLOR_STR; -extern int RDF_SELECT_START, RDF_SELECT_END, RDF_SELECT_OPTION; -extern int RDF_FIND_STR1, RDF_FIND_STR2, RDF_FIND_INPUT_STR; -extern int RDF_LOCAL_LOCATION_STR, RDF_REMOTE_LOCATION_STR, RDF_ALL_LOCATION_STR; -extern int RDF_CONTAINS_STR, RDF_IS_STR, RDF_IS_NOT_STR, RDF_STARTS_WITH_STR, RDF_ENDS_WITH_STR; -extern int RDF_FIND_TITLE, RDF_FIND_FULLNAME_STR, RDF_SHORTCUT_CONFLICT_STR, RDF_FTP_NAME_STR; - -#ifdef HT_PASSWORD_RTNS -extern int RDF_NEWPASSWORD, RDF_CONFIRMPASSWORD; -extern int RDF_MISMATCHPASSWORD, RDF_ENTERPASSWORD; -#endif - -#endif - - -#define MISSION_CONTROL_RDF_PREF "browser.navcenter.admin" -#define NETSCAPE_RDF_FILENAME "netscape.rdf" - -typedef struct _SBProviderStruct { - struct _SBProviderStruct *next; - char *url; - char *name; - PRBool containerp; - PRBool openp; -} SBProviderStruct; -typedef SBProviderStruct* SBProvider; - -typedef struct _HT_PaneStruct { - struct _HT_PaneStruct *next; - void *pdata; - HT_Notification ns; - PLHashTable *hash; - HT_NotificationMask mask; - RDF db; - RDF_Notification rns; - struct _HT_ViewStruct *viewList; - struct _HT_ViewStruct *selectedView; - struct _HT_URLSiteMapAssoc *smp; - struct _HT_URLSiteMapAssoc *sbp; - uint32 viewListCount; - PRBool autoFlushFlag; - SBProvider smartBrowsingProviders; - PRBool dirty; - PRBool personaltoolbar; - PRBool toolbar; - PRBool bookmarkmenu; - PRBool special; - int windowType; - char *windowURL; - char *templateType; - struct _HT_PaneStruct *templatePane; - char *htdburl; - RDFT htdb; -} HT_PaneStruct; - -typedef struct HT_ColumnStruct { - struct HT_ColumnStruct *next; - char *name; - uint32 width; - uint32 tokenType; - void *token; - void *feData; - PRBool isHiddenFlag; -} HT_ColumnStruct, *HT_Column; - -typedef struct _HT_ViewStruct { - struct _HT_ViewStruct *next; - HT_Pane pane; - HT_Resource top; - void *pdata; - HT_Column columns; - uint32 workspacePos; - struct _HT_ResourceStruct ***itemList; - uint32 itemListSize; - uint32 itemListCount; - uint32 topNodeIndex; - uint32 selectedNodeHint; - uint32 sortTokenType; - void *sortToken; - PRBool descendingFlag; - PRBool refreshingItemListp; - PRBool inited; - RDF_Resource treeRel; -} HT_ViewStruct; - -typedef struct _HT_ValueStruct { - struct _HT_ValueStruct *next; - uint32 tokenType; - RDF_Resource token; - void *data; -} HT_ValueStruct, *HT_Value; - -#define HT_CONTAINER_FLAG 0x0001 -#define HT_OPEN_FLAG 0x0002 -#define HT_AUTOFLUSH_OPEN_FLAG 0x0004 -#define HT_HIDDEN_FLAG 0x0008 -#define HT_SELECTED_FLAG 0x0010 -#define HT_VOLATILE_URL_FLAG 0x0020 -#define HT_FREEICON_URL_FLAG 0x0040 -#define HT_PASSWORDOK_FLAG 0x0080 -#define HT_INITED_FLAG 0x0100 -#define HT_DIRTY_FLAG 0x0200 -#define HT_ENABLED_FLAG 0x0400 - -typedef struct _HT_ResourceStruct { - struct _HT_ResourceStruct *nextItem; - HT_View view; - HT_Resource parent; - RDF_Resource node; - void *feData; - char *dataSource; - char *url[5]; - HT_Value values; - HT_Resource child; - HT_Resource *children; /* used by sorting */ - uint32 unsortedIndex; /* used by sorting */ - uint32 itemListIndex; - uint32 numChildren, numChildrenTotal; - uint16 flags; - uint16 depth; - HT_Resource next; - /* a pane or view might have multiple occurances of a RDF_Resource. - The hash table just points to the first of them. This allows us to - make a linked list of it */ -} HT_ResourceStruct; - -typedef struct _HT_MenuCommandStruct { - struct _HT_MenuCommandStruct *next; - HT_MenuCmd menuCmd; - char *name; - RDF_Resource graphCommand; -} _HT_MenuCommandStruct, *HT_MenuCommand; - -typedef struct _HT_CursorStruct { - HT_Resource container; - HT_Resource node; - RDF_Cursor cursor; - uint32 numElements; - HT_Column columns; - uint16 contextMenuIndex; - PRBool foundValidMenuItem; - PRBool isWorkspaceFlag; - PRBool isBackgroundFlag; - PRBool commandExtensions; - PRBool commandListBuild; - HT_MenuCmd menuCmd; - HT_MenuCommand menuCommandList; -} HT_CursorStruct; - -typedef struct _HT_Icon { - struct _HT_Icon *next; - char *name; -} _HT_Icon, *HT_Icon; - -typedef struct _htmlElement { - struct _htmlElement *next; - HT_Resource node; - RDF_Resource token; - uint32 tokenType; -} _htmlElement, *_htmlElementPtr; - -typedef struct _HT_URLSiteMapAssoc { - uint8 siteToolType; - uint8 origin; - uint8 onDisplayp; - char *url; - RDF_Resource sitemap; - char* name; - char* sitemapUrl; - RDFT db; - struct _HT_URLSiteMapAssoc *next; -} HT_URLSiteMapAssoc; - - - -/* HT function prototypes */ - -NSPR_BEGIN_EXTERN_C - -void HT_Startup(); -void HT_Shutdown(); -void htLoadComplete(char *url, int status); -void htTimerRoutine(void *timerID); -PRBool possiblyUpdateView(HT_View view); -void updateViewItem(HT_Resource node); -HT_Resource newHTEntry (HT_View view, RDF_Resource node); -void addWorkspace(HT_Pane pane, RDF_Resource r, void *feData); -void deleteWorkspace(HT_Pane pane, RDF_Resource r); -void htrdfNotifFunc (RDF_Event ns, void* pdata); -void bmkNotifFunc (RDF_Event ns, void* pdata); -void refreshItemListInt (HT_View view, HT_Resource node); -PRBool relatedLinksContainerp (HT_Resource node); -int nodeCompareRtn(HT_Resource *node1, HT_Resource *node2); -void sortNodes(HT_View view, HT_Resource parent, HT_Resource *children, uint32 numChildren); -uint32 refreshItemList1(HT_View view, HT_Resource node); -void refreshItemList (HT_Resource node, HT_Event whatHappened); -void refreshPanes(); -PRBool initToolbars (HT_Pane pane); -HT_Pane paneFromResource(RDF db, RDF_Resource resource, HT_Notification notify, PRBool autoFlushFlag, PRBool autoOpenFlag, PRBool useColumns); -void htSetBookmarkAddDateToNow(RDF_Resource r); -RDF newHTPaneDB(); -RDF HTRDF_GetDB(); -PRBool initViews (HT_Pane pane); -void htNewWorkspace(HT_Pane pane, char *id, char *optionalTitle, uint32 workspacePos); -HT_PaneStruct * HT_GetHTPaneList (); -HT_PaneStruct * HT_GetNextHTPane (HT_PaneStruct* pane); -void htSetWorkspaceOrder(RDF_Resource src, RDF_Resource dest, PRBool afterDestFlag); -HT_View HT_NewView (RDF_Resource topNode, HT_Pane pane, PRBool useColumns, void *feData, PRBool autoOpen); -void sendNotification (HT_Resource node, HT_Event whatHappened, RDF_Resource s, HT_ColumnType type); -void deleteHTNode(HT_Resource node); -void destroyViewInt (HT_Resource r, PRBool saveOpenState); -void htDeletePane(HT_Pane pane, PRBool saveWorkspaceOrder); -void saveWorkspaceOrder(HT_Pane pane); -void resynchItem (HT_Resource node, void *token, void *data, PRBool assertAction); -void resynchContainer (HT_Resource container); -HT_Resource addContainerItem (HT_Resource container, RDF_Resource item); -void refreshContainerIndexes(HT_Resource container); -void removeHTFromHash (HT_Pane pane, HT_Resource item); -void deleteHTSubtree (HT_Resource subtree); -void deleteContainerItem (HT_Resource container, RDF_Resource item); -uint32 fillContainer (HT_Resource node); -void sendColumnNotification (HT_View view, void *token, uint32 tokenType, HT_Event whatHappened); -PRBool htIsMenuCmdEnabled(HT_Pane pane, HT_MenuCmd menuCmd, PRBool isWorkspaceFlag, PRBool isBackgroundFlag); -void freeMenuCommandList(); -void exportCallbackWrite(PRFileDesc *fp, char *str); -void exportCallback(MWContext *context, char *filename, RDF_Resource node); -void htEmptyClipboard(RDF_Resource parent); -void htCopyReference(RDF_Resource original, RDF_Resource newParent, PRBool empty); -PRBool htVerifyUniqueToken(HT_Resource node, void *token, uint32 tokenType, char *data); -PRBool ht_isURLReal(HT_Resource node); -char * buildInternalIconURL(HT_Resource node, PRBool *volatileURLFlag, PRBool largeIconFlag, PRBool workspaceFlag); -char * getIconURL( HT_Resource node, PRBool toolbarFlag, PRBool workspaceFlag, int state); -PRBool htIsPropertyInMoreOptions(RDF_Resource r); -void addHtmlElement(HT_Resource node, RDF_Resource token, uint32 tokenType); -void freeHtmlElementList(); -_htmlElementPtr findHtmlElement(void *token); -void freeHtmlElement(void *token); -char * constructHTMLTagData(char *dynStr, int strID, char *data); -char * constructHTML(char *dynStr, HT_Resource node, void *token, uint32 tokenType); -char * constructHTMLPermission(char *dynStr, HT_Resource node, RDF_Resource token, char *permText); -PRBool htIsOpLocked(HT_Resource node, RDF_Resource token); -char * constructBasicHTML(char *dynStr, int strID, char *data1, char *data2); -void setHiddenState (HT_Resource node); -void htSetFindResourceName(RDF db, RDF_Resource r); -void htOpenTo(HT_View view, RDF_Resource u, PRBool selectView); -PRBool mutableContainerp (RDF_Resource node); -char * possiblyCleanUpTitle (char* title); -PRBool htRemoveChild(HT_Resource parent, HT_Resource child, PRBool moveToTrash); -void ht_SetPassword(HT_Resource node, char *password); -PRBool ht_hasPassword(HT_Resource node); -PRBool ht_checkPassword(HT_Resource node, PRBool alwaysCheck); -HT_DropAction htLaunchSmartNode(HT_Resource dropTarget, char *fullURL); -HT_DropAction dropOnSmartNode(HT_Resource dropTarget, HT_Resource dropObject, PRBool justAction); -HT_DropAction dropOnSmartURL(HT_Resource dropTarget, char *objTitle, PRBool justAction); -HT_DropAction dropOn (HT_Resource dropTarget, HT_Resource dropObject, PRBool justAction); -void Win32FileCopyMove(HT_Resource dropTarget, HT_Resource dropObject); -HT_DropAction copyMoveRDFLink (HT_Resource dropTarget, HT_Resource dropObject); -HT_DropAction copyMoveRDFLinkAtPos (HT_Resource dropx, HT_Resource dropObject, PRBool before); -HT_DropAction uploadLFS (HT_Resource dropTarget, HT_Resource dropObject); -HT_DropAction uploadRDFFile (HT_Resource dropTarget, HT_Resource dropObject); -HT_DropAction esfsCopyMoveContent (HT_Resource dropTarget, HT_Resource dropObject); -RDF_BT urlResourceType (char* url); -HT_DropAction dropURLOn (HT_Resource dropTarget, char* objURL, char *objTitle, PRBool justAction); -void replacePipeWithColon(char* url); -HT_DropAction copyRDFLinkURL (HT_Resource dropTarget, char* objURL, char *objTitle); -HT_DropAction copyRDFLinkURLAt (HT_Resource dropx, char* objURL, char *objTitle, PRBool before); -HT_DropAction uploadLFSURL (HT_Resource dropTarget, char* objURL); -HT_DropAction uploadRDFFileURL (HT_Resource dropTarget, char* objURL); -HT_DropAction esfsCopyMoveContentURL (HT_Resource dropTarget, char* objURL); -RDFT HTADD(HT_Pane pane, RDF_Resource u, RDF_Resource s, void* v); -HT_URLSiteMapAssoc * makeNewSMP (HT_Pane htPane, char* pUrl, char* sitemapurl); -void RetainOldSitemaps (HT_Pane htPane, char *pUrl); -void populateSBProviders (HT_Pane htPane); -SBProvider SBProviderOfNode (HT_Resource node); -PRBool implicitDomainURL (char* url); -PRBool domainMatches (char *dom, char *url); -void nextDomain (char* dom, size_t *n); -PRBool relatedLinksEnabledURL (char* url); -void cleanupInt (HT_Pane htPane, HT_URLSiteMapAssoc *nsmp, RDF_Resource parent); -HT_Pane newTemplatePane(char* templateName); -void PaneDeleteSBPCleanup (HT_Pane htPane); - -#ifndef HT_RAPTOR -PRBool rdfFindDialogHandler(XPDialogState *dlgstate, char **argv, int argc, unsigned int button); -#endif - -NSPR_END_EXTERN_C - -#endif - diff --git a/mozilla/rdf/src/mail.c b/mozilla/rdf/src/mail.c deleted file mode 100644 index a8f70ac330d..00000000000 --- a/mozilla/rdf/src/mail.c +++ /dev/null @@ -1,563 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file implements mail support for the rdf data model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#ifdef SMART_MAIL -#include "pm2rdf.h" - -extern char *profileDirURL; - - - -void -Pop_GetUrlExitFunc (URL_Struct *urls, int status, MWContext *cx) -{ -} - - - -void -GetPopToRDF (RDFT rdf) -{ - MF folder = (MF) rdf->pdata; - if (endsWith("/inbox", rdf->url)) { - char* popurl = getMem(100); - int n = 10; - int l = strlen(rdf->url); - URL_Struct *urls ; - memcpy(popurl, "pop3://", 7); - while (n < l) { - if (rdf->url[n] == '/') break; - popurl[n-3] = rdf->url[n]; - n++; - } - - urls = NET_CreateURLStruct(popurl, NET_DONT_RELOAD); - if (urls != NULL) { - urls->fe_data = rdf; - - NET_GetURL(urls, FO_PRESENT, gRDFMWContext(rdf), Pop_GetUrlExitFunc); - } - } -} - - - -void -PopGetNewMail (RDF_Resource r) -{ - if (containerp(r) && (resourceType(r) == PM_RT)) { - MF folder = (MF) r->pdata; - GetPopToRDF(folder->rdf); - } -} - - - -char * -stripCopy (char* str) -{ - return copyString(XP_StripLine(str)); -} - - - -PRBool -msgDeletedp (MM msg) -{ - return (msg && (msg->flags) && (msg->flags[4] == '8')); -} - - - -FILE * -openPMFile (char* path) -{ - FILE* ans = fopen(path, "r+"); - if (!ans) { - ans = fopen(path, "w"); - if (ans) fclose(ans); - ans = fopen(path, "r+"); - } - return ans; -} - - - -void -addMsgToFolder (MF folder, MM msg) -{ - if (!folder->tail) { - folder->msg = folder->tail = msg; - } else { - folder->tail->next = msg; - folder->tail = msg; - } -} - - - -void -RDF_StartMessageDelivery (RDFT rdf) -{ - MF folder = (MF) rdf->pdata; - MM msg = (MM) getMem(sizeof(struct MailMessage)); - char* nurl = getMem(100); - fseek(folder->mfile, 0L, SEEK_END); - fprintf(folder->mfile, "From - \n"); - msg->offset = ftell(folder->mfile); - sprintf(nurl, "%s?%i", rdf->url, msg->offset); - msg->r = RDF_GetResource(NULL, nurl, 1); - msg->r->pdata = msg; - msg->flags = getMem(4); - folder->add = msg; - setResourceType(msg->r, PM_RT); - fseek(folder->mfile, 0L, SEEK_END); - fputs("X-Mozilla-Status: 0000\n", folder->mfile); -} - - - -char * -MIW1 (const char* block, int32 len) -{ - char* blk = XP_ALLOC(len +1); - int32 n = 0; - int32 m = 0; - PRBool seenp = 0; - PRBool wsendp = 0; - memset(blk, '\0', len); - while (n++ < len) { - char c = block[n]; - if ((c == '\r') || (c == '\n')) break; - if (!seenp) { - seenp = (c == ':'); - } else { - if (c != ' ') wsendp = 1; - if (wsendp) { - blk[m++] = c; - } - } - } - return blk; -} - - - -void -RDF_AddMessageLine (RDFT rdf, char* block, int32 length) -{ - MF folder = (MF) rdf->pdata; - MM msg = folder->add; - char* temp = getMem(length+1); - memcpy(temp, block, length); - if (!msg->from && (startsWith("From:", block))) { - msg->from = MIW1(block, length); - } else if (!msg->subject && (startsWith("Subject:", block))) { - msg->subject = MIW1(block, length); - } else if (!msg->date && (startsWith("Date:", block))) { - msg->date = MIW1(block, length); - } - fseek(folder->mfile, 0L, SEEK_END); - fputs(temp, folder->mfile); - freeMem(temp); -} - - -#define TON(s) ((s == NULL) ? "" : s) -void writeMsgSum (MF folder, MM msg) { - if (!msg->flags) msg->flags = copyString("0000"); - if (msg->summOffset == -1) { - fseek(folder->sfile, 0L, SEEK_END); - msg->summOffset = ftell(folder->sfile); - } else { - fseek(folder->sfile, msg->summOffset, SEEK_SET); - } - fprintf(folder->sfile, "Status: %s\nSOffset: %d\nFrom: %s\nSubject: %s\nDate: %s\nMOffset: %d\n", - msg->flags, ftell(folder->sfile), - TON(msg->from), TON(msg->subject), TON(msg->date), msg->offset ); -} - - - -void -RDF_FinishMessageDelivery (RDFT rdf) -{ - MF folder = (MF) rdf->pdata; - MM msg = folder->add; - folder->add = NULL; - addMsgToFolder(folder, msg); - setResourceType(msg->r, PM_RT); - fseek(folder->sfile, 0L, SEEK_END); - msg->summOffset = ftell(folder->sfile); - writeMsgSum(folder, msg); - fseek(folder->mfile, 0L, SEEK_END); - fputs("\n", folder->mfile); - sendNotifications2(rdf, RDF_ASSERT_NOTIFY, msg->r, gCoreVocab->RDF_parent, folder->top, - RDF_RESOURCE_TYPE, 1); -} - - - -void -setMessageFlag (RDFT rdf, RDF_Resource r, char* newFlag) -{ - MF folder = (MF) rdf->pdata; - MM msg = (MM)r->pdata; - fseek(folder->sfile, msg->summOffset+8, SEEK_SET); - fputs(newFlag, folder->sfile); - freeMem(msg->flags); - msg->flags = copyString(newFlag); - /* need to mark the flag in the message file */ - fflush(folder->sfile); -} - -#define BUFF_SIZE 50000 - - -RDFT -getBFTranslator (char* url) { - if (startsWith("mailbox://folder/", url)) { - char* temp = getMem(strlen(url)); - RDFT ans = NULL; - sprintf(temp, "mailbox://%s", &url[17]); - ans = getTranslator(temp); - freeMem(temp); - return ans; - } else return getTranslator(url); -} - -PRBool -MoveMessage (char* to, char* from, MM message) { - RDFT todb = getBFTranslator(to); - RDFT fromdb = getBFTranslator(from); - MF tom = todb->pdata; - MF fom = fromdb->pdata; - RDF_Resource r; - MM newMsg = (MM)getMem(sizeof(struct MailMessage)); - char* buffer = getMem(BUFF_SIZE); - if (!buffer) return 0; - setMessageFlag(fromdb, message->r, "0008"); - fseek(tom->mfile, 0L, SEEK_END); - fseek(fom->mfile, message->offset, SEEK_SET); - fputs("From -\n", tom->mfile); - sprintf(buffer, "mailbox://%s?%d", &to[17], ftell(tom->mfile)); - r = RDF_GetResource(NULL, buffer, 1); - newMsg->subject = copyString(message->subject); - newMsg->from = copyString(message->from); - newMsg->date = copyString(message->date); - newMsg->r = r; - r->pdata = newMsg; - setResourceType(r, PM_RT); - newMsg->summOffset = -1; - newMsg->offset = ftell(tom->mfile); - writeMsgSum(tom, newMsg); - addMsgToFolder (tom, newMsg) ; - fflush(tom->sfile); - while (fgets(buffer, BUFF_SIZE, fom->mfile) && strncmp("From ", buffer, 5)) { - fputs(buffer, tom->mfile); - } - sendNotifications2(todb, RDF_ASSERT_NOTIFY, r, gCoreVocab->RDF_parent, tom->top, - RDF_RESOURCE_TYPE, 1); - sendNotifications2(fromdb, RDF_DELETE_NOTIFY, message->r, gCoreVocab->RDF_parent, fom->top, - RDF_RESOURCE_TYPE, 1); - freeMem(buffer); - return 1; -} - - - -void -readSummaryFile (RDFT rdf) -{ - if (startsWith("mailbox://", rdf->url)) { - char* url = rdf->url; - char* folderURL = &url[10]; - int32 flen = strlen(profileDirURL) + strlen(folderURL) + 4; - char* fileurl = getMem(flen); - char* nurl = getMem(strlen(url) + 20); - FILE *f; - char* buff = getMem(BUFF_SIZE); - MF folder = (MF) getMem(sizeof(struct MailFolder)); - MM msg = NULL; - FILE *mf; - char* aclen; - - rdf->pdata = folder; - sprintf(fileurl, "%s%s.ssf", profileDirURL, folderURL); - fileurl = MCDepFileURL(fileurl); - f = openPMFile(fileurl); - sprintf(fileurl, "%s%s", profileDirURL, folderURL); - fileurl = MCDepFileURL(fileurl); - mf = openPMFile(fileurl); - folder->top = RDF_GetResource(NULL, rdf->url, 1); - setResourceType(folder->top, PM_RT); - setContainerp(folder->top, 1); - folder->top->pdata = folder; - folder->rdf = rdf; - folder->sfile = f; - folder->mfile = mf; - - while (f && fgets(buff, BUFF_SIZE, f)) { - if (startsWith("Status:", buff)) { - msg = (MM) getMem(sizeof(struct MailMessage)); - msg->flags = stripCopy(&buff[8]); - fgets(buff, BUFF_SIZE, f); - sscanf(&buff[9], "%d", &msg->summOffset); - fgets(buff, BUFF_SIZE, f); - msg->from = stripCopy(&buff[6]); - fgets(buff, BUFF_SIZE, f); - msg->subject = stripCopy(&buff[8]); - fgets(buff, BUFF_SIZE, f); - msg->date = stripCopy(&buff[6]); - fgets(buff, BUFF_SIZE, f); - sscanf(&buff[9], "%d", &msg->offset); - sprintf(nurl, "%s?%d", url, msg->offset); - msg->r = RDF_GetResource(NULL, nurl, 1); - msg->r->pdata = msg; - addMsgToFolder (folder, msg) ; - setResourceType(msg->r, PM_RT); - } - } - - if (msg == NULL) { - /* either a new mailbox or need to read BMF to recreate */ - while (mf && fgets(buff, BUFF_SIZE, mf)) { - if (strncmp("From ", buff, 5) ==0) { - if (msg) writeMsgSum(folder, msg); - msg = (MM) getMem(sizeof(struct MailMessage)); - msg->offset = ftell(mf); - msg->summOffset = -1; - sprintf(nurl, "%s?%i", url, msg->offset); - msg->r = RDF_GetResource(NULL, nurl, 1); - msg->r->pdata = msg; - setResourceType(msg->r, PM_RT); - addMsgToFolder (folder, msg) ; - } - if ((!msg->from) && (startsWith("From:", buff))) { - msg->from = stripCopy(&buff[6]); - } else if ((!msg->date) && (startsWith("Date:", buff))) { - msg->date = stripCopy(&buff[6]); - } else if ((!msg->subject) && (startsWith("Subject:", buff))) { - msg->subject = stripCopy(&buff[8]); - } else if ((!msg->flags) && (startsWith("X-Mozilla-Status:", buff))) { - msg->flags = stripCopy(&buff[17]); - } - } - if (msg) writeMsgSum(folder, msg); - if (folder->sfile) fflush(folder->sfile); - } - memset(fileurl, '\0', flen); - memcpy(fileurl, rdf->url, strlen(rdf->url)); - aclen = strchr(&fileurl[10], '/'); - fileurl[aclen-fileurl] = '\0'; - strcat(fileurl, "/trash"); - folder->trash = fileurl; - freeMem(buff); - freeMem(nurl); - /* GetPopToRDF(rdf); */ - } -} - - - -void * -pmGetSlotValue (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, - PRBool inversep, PRBool tv) -{ - if ((resourceType(u) == PM_RT) && tv && (!inversep) && (type == RDF_STRING_TYPE) && (u->pdata)) { - MM msg = (MM) u->pdata; - if (s == gNavCenter->from) { - XP_ASSERT( (RDF_STRING_TYPE != type) || ( IsUTF8String((const char* )msg->from))); - return copyString(msg->from); - } else if (s == gNavCenter->subject) { - XP_ASSERT( (RDF_STRING_TYPE != type) || ( IsUTF8String((const char* )msg->subject))); - return copyString(msg->subject); - } else if (s == gNavCenter->date) { - return copyString(msg->date); - } else return NULL; - } else return NULL; -} - - - -RDF_Cursor -pmGetSlotValues (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, - PRBool inversep, PRBool tv) -{ - if ((resourceType(u) == PM_RT) && tv && (inversep) && (type == RDF_RESOURCE_TYPE) - && (s == gCoreVocab->RDF_parent)) { - MF folder = (MF)rdf->pdata; - if (folder->top == u) { - RDF_Cursor c = (RDF_Cursor)getMem(sizeof(struct RDF_CursorStruct)); - c->u = u; - c->s = s; - c->type = type; - c->inversep = inversep; - c->tv = tv; - c->count = 0; - c->pdata = folder->msg; - return c; - } else return NULL; - } else return NULL; -} - - - -void * -pmNextValue (RDFT rdf, RDF_Cursor c) -{ - MM msg = (MM) c->pdata; - RDF_Resource ans = NULL; - while (msg && msgDeletedp(msg)) { - msg = msg->next; - } - if (msg) { - ans = msg->r; - c->pdata = msg->next; - } - return ans; -} - - - -RDF_Error -pmDisposeCursor (RDFT mcf, RDF_Cursor c) -{ - freeMem(c); - return noRDFErr; -} - - - -FILE * -getPopMBox (RDFT db) -{ - MF folder = (MF)db->pdata; - return folder->mfile; -} - - - -PRBool -pmHasAssertion (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) -{ - /*this is clearly wrong, but doesn't break anything now ...*/ - return 1; -} - - - -PRBool -pmRemove (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) -{ - XP_ASSERT( (RDF_STRING_TYPE != type) || ( IsUTF8String((const char* )v))); - if ((startsWith("mailbox://", rdf->url)) && (resourceType(u) == PM_RT) && (s == gCoreVocab->RDF_parent) - && (type == RDF_RESOURCE_TYPE)) { - RDF_Resource mbox = (RDF_Resource) v; - if (!(containerp(mbox) && (resourceType(mbox) == PM_RT))) { - return false; - } else { - MF folder = (MF)mbox->pdata; - sendNotifications2(rdf, RDF_DELETE_NOTIFY, u, s, v, type, 1); - MoveMessage(folder->trash, resourceID(mbox), (MM)u->pdata); - return 1; - } - } else return false; -} - - - -RDFT -MakePopDB (char* url) -{ - if (startsWith("mailbox://", url)) { - RDFT ntr; - if ((ntr = (RDFT)getMem(sizeof(struct RDF_TranslatorStruct))) != NULL) { - char* fileurl = getMem(100); - PRDir* dir ; - char* aclen; - sprintf(fileurl, "%s%s", profileDirURL, &url[10]); - aclen = strchr(&fileurl[strlen(profileDirURL)+1], '/'); - fileurl[aclen-fileurl] = '\0'; - dir = OpenDir(fileurl); - if (dir == NULL) { - if ( CallPRMkDirUsingFileURL(fileurl, 00700) > -1) dir = OpenDir(fileurl); - } - freeMem(fileurl); - if (dir) { - PR_CloseDir(dir); - ntr->assert = NULL; - ntr->unassert = pmRemove; - ntr->getSlotValue = pmGetSlotValue; - ntr->getSlotValues = pmGetSlotValues; - ntr->hasAssertion = pmHasAssertion; - ntr->nextValue = pmNextValue; - ntr->disposeCursor = pmDisposeCursor; - ntr->url = copyString(url); - readSummaryFile(ntr); - return ntr; - } else { - freeMem(ntr); - return NULL; - } - } - else return NULL; - } else return NULL; -} - - - -RDFT -MakeMailAccountDB (char* url) -{ - if (startsWith("mailaccount://", url)) { - RDFT ntr = NewRemoteStore(url); - char* fileurl = getMem(100); - int32 n = PR_SKIP_BOTH; - PRDirEntry *de; - PRDir* dir ; - RDF_Resource top = RDF_GetResource(NULL, url, 1); - sprintf(fileurl, "%s%s", profileDirURL, &url[14]); - dir = OpenDir(fileurl); - if (dir == NULL) { - if ( CallPRMkDirUsingFileURL(fileurl, 00700) > -1) dir = OpenDir(fileurl); - } - while ((dir != NULL) && ((de = PR_ReadDir(dir, (PRDirFlags)(n++))) != NULL)) { - if ((!endsWith(".ssf", de->name)) && (!endsWith(".dat", de->name)) && - (!endsWith(".snm", de->name)) && (!endsWith("~", de->name))) { - RDF_Resource r; - sprintf(fileurl, "mailbox://folder/%s/%s", &url[14], de->name); - r = RDF_GetResource(NULL, fileurl, 1); - setResourceType(r, PMF_RT); - remoteStoreAdd(ntr, r, gCoreVocab->RDF_parent, top, RDF_RESOURCE_TYPE, 1); - remoteStoreAdd(ntr, r, gCoreVocab->RDF_name, copyString(de->name), RDF_STRING_TYPE, 1); - } - } - freeMem(fileurl); - if (dir) PR_CloseDir(dir); - return ntr; - } else return NULL; -} - -#endif diff --git a/mozilla/rdf/src/nsRDFElement.cpp b/mozilla/rdf/src/nsRDFElement.cpp deleted file mode 100644 index 966069c95a3..00000000000 --- a/mozilla/rdf/src/nsRDFElement.cpp +++ /dev/null @@ -1,1449 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and limitations - * under the License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is Netscape Communications - * Corporation. Portions created by Netscape are Copyright (C) 1998 - * Netscape Communications Corporation. All Rights Reserved. - */ - -/* - - A "pseudo content element" that acts as a proxy to RDF. - - Unfortunately, there is no one right way to transform RDF into a - document model. Ideally, one would like to use something like XSL to - define how to do it in a declarative, user-definable way. But since - we don't have XSL yet, that's not an option. So here we have a - hard-coded implementation that does the job. - - TO DO - - 1) In the absence of XSL, at least factor out the strategy used to - build the content model so that multiple models can be build - (e.g., table-like HTML vs. XUI tree control, etc.) - - This involves both hacking the code that generates children for - presentation, and the code that manipulates children via the DOM, - which leads us to the next item... - - 2) Implement DOM interfaces. - - */ - - -// #define the following if you want properties to show up as -// attributes on an element. I know, this sucks, but I'm just not -// really sure if this is necessary... -//#define CREATE_PROPERTIES_AS_ATTRIBUTES - -#include "nsDOMEvent.h" -#include "nsHashtable.h" -#include "nsIAtom.h" -#include "nsIDOMNodeList.h" -#include "nsIDOMScriptObjectFactory.h" -#include "nsIDocument.h" -#include "nsIEventListenerManager.h" -#include "nsIEventStateManager.h" -#include "nsIRDFCursor.h" -#include "nsIRDFDataBase.h" -#include "nsIRDFDocument.h" -#include "nsIRDFNode.h" -#include "nsIRDFResourceManager.h" -#include "nsIServiceManager.h" -#include "nsISupportsArray.h" -#include "nsRDFCID.h" -#include "nsRDFElement.h" -#include "nsINameSpaceManager.h" - -//////////////////////////////////////////////////////////////////////// - -static NS_DEFINE_IID(kIContentIID, NS_ICONTENT_IID); -static NS_DEFINE_IID(kIDOMElementIID, NS_IDOMELEMENT_IID); -static NS_DEFINE_IID(kIDOMEventReceiverIID, NS_IDOMEVENTRECEIVER_IID); -static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID); -static NS_DEFINE_IID(kIDOMNodeListIID, NS_IDOMNODELIST_IID); -static NS_DEFINE_IID(kIDocumentIID, NS_IDOCUMENT_IID); -static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID); -static NS_DEFINE_IID(kIRDFContentIID, NS_IRDFCONTENT_IID); -static NS_DEFINE_IID(kIRDFDataBaseIID, NS_IRDFDATABASE_IID); -static NS_DEFINE_IID(kIRDFDocumentIID, NS_IRDFDOCUMENT_IID); -static NS_DEFINE_IID(kIRDFResourceManagerIID, NS_IRDFRESOURCEMANAGER_IID); -static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kIXMLContentIID, NS_IXMLCONTENT_IID); - -static NS_DEFINE_CID(kRDFResourceManagerCID, NS_RDFRESOURCEMANAGER_CID); - - - -//////////////////////////////////////////////////////////////////////// -// RDFDOMNodeListImpl -// -// Helper class to implement the nsIDOMNodeList interface. It's -// probably wrong in some sense, as it uses the "naked" content -// interface to look for kids. (I assume in general this is bad -// because there may be pseudo-elements created for presentation -// that aren't visible to the DOM.) -// - -class RDFDOMNodeListImpl : public nsIDOMNodeList { -private: - nsRDFElement* mElement; - -public: - RDFDOMNodeListImpl(nsRDFElement* element) : mElement(element) { - NS_IF_ADDREF(mElement); - } - - virtual ~RDFDOMNodeListImpl(void) { - NS_IF_RELEASE(mElement); - } - - // nsISupports interface - NS_DECL_ISUPPORTS - - NS_DECL_IDOMNODELIST -}; - -NS_IMPL_ISUPPORTS(RDFDOMNodeListImpl, kIDOMNodeListIID); - -NS_IMETHODIMP -RDFDOMNodeListImpl::GetLength(PRUint32* aLength) -{ - PRInt32 count; - nsresult rv; - if (NS_FAILED(rv = mElement->ChildCount(count))) - return rv; - *aLength = count; - return NS_OK; -} - - -NS_IMETHODIMP -RDFDOMNodeListImpl::Item(PRUint32 aIndex, nsIDOMNode** aReturn) -{ - // XXX naive. probably breaks when there are pseudo elements or something. - nsresult rv; - nsIContent* contentChild; - if (NS_FAILED(rv = mElement->ChildAt(aIndex, contentChild))) - return rv; - - rv = contentChild->QueryInterface(kIDOMNodeIID, (void**) aReturn); - NS_RELEASE(contentChild); - - return rv; -} - - -//////////////////////////////////////////////////////////////////////// -// nsGenericAttribute - -struct nsGenericAttribute -{ - nsGenericAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, const nsString& aValue) - : mNameSpaceID(aNameSpaceID), - mName(aName), - mValue(aValue) - { - NS_IF_ADDREF(mName); - } - - ~nsGenericAttribute(void) - { - NS_IF_RELEASE(mName); - } - - PRInt32 mNameSpaceID; - nsIAtom* mName; - nsString mValue; -}; - -//////////////////////////////////////////////////////////////////////// -// nsRDFElement - -nsresult -NS_NewRDFElement(nsIRDFContent** result) -{ - NS_PRECONDITION(result, "null ptr"); - if (! result) - return NS_ERROR_NULL_POINTER; - - *result = NS_STATIC_CAST(nsIRDFContent*, new nsRDFElement()); - if (! *result) - return NS_ERROR_OUT_OF_MEMORY; - - NS_ADDREF(*result); - return NS_OK; -} - -nsRDFElement::nsRDFElement(void) - : mDocument(nsnull), - mNameSpacePrefix(nsnull), - mNameSpaceID(kNameSpaceID_Unknown), - mScriptObject(nsnull), - mResource(nsnull), - mChildren(nsnull), - mChildrenMustBeGenerated(PR_TRUE), - mParent(nsnull), - mAttributes(nsnull) -{ - NS_INIT_REFCNT(); -} - -nsRDFElement::~nsRDFElement() -{ - if (nsnull != mAttributes) { - PRInt32 count = mAttributes->Count(); - PRInt32 index; - for (index = 0; index < count; index++) { - nsGenericAttribute* attr = (nsGenericAttribute*)mAttributes->ElementAt(index); - delete attr; - } - delete mAttributes; - } - // mDocument is not refcounted - //NS_IF_RELEASE(mScriptObject); XXX don't forget! - NS_IF_RELEASE(mChildren); - NS_IF_RELEASE(mNameSpacePrefix); - NS_IF_RELEASE(mResource); -} - -NS_IMPL_ADDREF(nsRDFElement); -NS_IMPL_RELEASE(nsRDFElement); - -NS_IMETHODIMP -nsRDFElement::QueryInterface(REFNSIID iid, void** result) -{ - if (! result) - return NS_ERROR_NULL_POINTER; - - if (iid.Equals(kIRDFContentIID) || - iid.Equals(kIXMLContentIID) || - iid.Equals(kIContentIID) || - iid.Equals(kISupportsIID)) { - *result = NS_STATIC_CAST(nsIRDFContent*, this); - } - else if (iid.Equals(kIDOMElementIID) || - iid.Equals(kIDOMNodeIID)) { - *result = NS_STATIC_CAST(nsIDOMElement*, this); - } - else if (iid.Equals(kIScriptObjectOwnerIID)) { - *result = NS_STATIC_CAST(nsIScriptObjectOwner*, this); - } - else if (iid.Equals(kIDOMEventReceiverIID)) { - *result = NS_STATIC_CAST(nsIDOMEventReceiver*, this); - } - else if (iid.Equals(kIJSScriptObjectIID)) { - *result = NS_STATIC_CAST(nsIJSScriptObject*, this); - } - else { - *result = nsnull; - return NS_NOINTERFACE; - } - - // if we get here, we know one of the above IIDs was ok. - AddRef(); - return NS_OK; -} - -//////////////////////////////////////////////////////////////////////// -// nsIDOMNode interface - -NS_IMETHODIMP -nsRDFElement::GetNodeName(nsString& aNodeName) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetNodeValue(nsString& aNodeValue) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::SetNodeValue(const nsString& aNodeValue) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetNodeType(PRUint16* aNodeType) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetParentNode(nsIDOMNode** aParentNode) -{ - if (!mParent) - return NS_ERROR_NOT_INITIALIZED; - - return mParent->QueryInterface(kIDOMNodeIID, (void**) aParentNode); -} - - -NS_IMETHODIMP -nsRDFElement::GetChildNodes(nsIDOMNodeList** aChildNodes) -{ - nsresult rv; - if (mChildrenMustBeGenerated) { - if (NS_FAILED(rv = GenerateChildren())) - return rv; - } - - RDFDOMNodeListImpl* list = new RDFDOMNodeListImpl(this); - if (! list) - return NS_ERROR_OUT_OF_MEMORY; - - return list->QueryInterface(kIDOMNodeListIID, (void**) aChildNodes); -} - - -NS_IMETHODIMP -nsRDFElement::GetFirstChild(nsIDOMNode** aFirstChild) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetLastChild(nsIDOMNode** aLastChild) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetPreviousSibling(nsIDOMNode** aPreviousSibling) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetNextSibling(nsIDOMNode** aNextSibling) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetAttributes(nsIDOMNamedNodeMap** aAttributes) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetOwnerDocument(nsIDOMDocument** aOwnerDocument) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::InsertBefore(nsIDOMNode* aNewChild, nsIDOMNode* aRefChild, nsIDOMNode** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::ReplaceChild(nsIDOMNode* aNewChild, nsIDOMNode* aOldChild, nsIDOMNode** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::RemoveChild(nsIDOMNode* aOldChild, nsIDOMNode** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::AppendChild(nsIDOMNode* aNewChild, nsIDOMNode** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::HasChildNodes(PRBool* aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; - -#if 0 - nsRDFElement* it = new nsRDFElement(); - if (! it) - return NS_ERROR_OUT_OF_MEMORY; - - return it->QueryInterface(kIDOMNodeIID, (void**) aReturn); -#endif -} - - -//////////////////////////////////////////////////////////////////////// -// nsIDOMElement interface - -NS_IMETHODIMP -nsRDFElement::GetTagName(nsString& aTagName) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetDOMAttribute(const nsString& aName, nsString& aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::SetDOMAttribute(const nsString& aName, const nsString& aValue) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::RemoveAttribute(const nsString& aName) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetAttributeNode(const nsString& aName, nsIDOMAttr** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::SetAttributeNode(nsIDOMAttr* aNewAttr, nsIDOMAttr** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::RemoveAttributeNode(nsIDOMAttr* aOldAttr, nsIDOMAttr** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::GetElementsByTagName(const nsString& aName, nsIDOMNodeList** aReturn) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -NS_IMETHODIMP -nsRDFElement::Normalize() -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - - -//////////////////////////////////////////////////////////////////////// -// nsIDOMEventReceiver interface - -NS_IMETHODIMP -nsRDFElement::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::GetListenerManager(nsIEventListenerManager** aInstancePtrResult) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - - -//////////////////////////////////////////////////////////////////////// -// nsIScriptObjectOwner interface - -NS_IMETHODIMP -nsRDFElement::GetScriptObject(nsIScriptContext* aContext, void** aScriptObject) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::SetScriptObject(void *aScriptObject) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -//////////////////////////////////////////////////////////////////////// -// nsIJSScriptObject interface - -PRBool -nsRDFElement::AddProperty(JSContext *aContext, jsval aID, jsval *aVp) -{ - return PR_FALSE; -} - -PRBool -nsRDFElement::DeleteProperty(JSContext *aContext, jsval aID, jsval *aVp) -{ - return PR_FALSE; -} - -PRBool -nsRDFElement::GetProperty(JSContext *aContext, jsval aID, jsval *aVp) -{ - return PR_FALSE; -} - -PRBool -nsRDFElement::SetProperty(JSContext *aContext, jsval aID, jsval *aVp) -{ - return PR_FALSE; -} - -PRBool -nsRDFElement::EnumerateProperty(JSContext *aContext) -{ - return PR_FALSE; -} - - -PRBool -nsRDFElement::Resolve(JSContext *aContext, jsval aID) -{ - return PR_FALSE; -} - - -PRBool -nsRDFElement::Convert(JSContext *aContext, jsval aID) -{ - return PR_FALSE; -} - - -void -nsRDFElement::Finalize(JSContext *aContext) -{ -} - - - -//////////////////////////////////////////////////////////////////////// -// nsIContent interface -// -// Just to say this again (I said it in the header file), none of -// the manipulators for nsIContent will do anything to the RDF -// graph. These are assumed to be used only by the content model -// constructor, who is presumed to be _using_ the RDF graph to -// construct this content model. -// -// You have been warned. -// - -NS_IMETHODIMP -nsRDFElement::GetDocument(nsIDocument*& aResult) const -{ - nsIDocument* doc; - nsresult rv = mDocument->QueryInterface(kIDocumentIID, (void**) &doc); - aResult = doc; // implicit AddRef() from QI - return rv; -} - -NS_IMETHODIMP -nsRDFElement::SetDocument(nsIDocument* aDocument, PRBool aDeep) -{ - nsresult rv; - - if (aDocument) { - nsIRDFDocument* doc; - if (NS_FAILED(rv = aDocument->QueryInterface(kIRDFDocumentIID, - (void**) &doc))) - return rv; - - mDocument = doc; - NS_RELEASE(doc); // not refcounted - } - - if (aDeep && mChildren) { - for (PRInt32 i = mChildren->Count() - 1; i >= 0; --i) { - // XXX this entire block could be more rigorous about - // dealing with failure. - nsISupports* obj = mChildren->ElementAt(i); - - PR_ASSERT(obj); - if (! obj) - continue; - - nsIContent* child; - if (NS_SUCCEEDED(obj->QueryInterface(kIContentIID, (void**) &child))) { - child->SetDocument(aDocument, aDeep); - NS_RELEASE(child); - } - - NS_RELEASE(obj); - } - } - - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::GetParent(nsIContent*& aResult) const -{ - if (!mParent) - return NS_ERROR_NOT_INITIALIZED; - - aResult = mParent; - NS_ADDREF(aResult); - - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::SetParent(nsIContent* aParent) -{ - mParent = aParent; // no refcount - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::CanContainChildren(PRBool& aResult) const -{ - // XXX Hmm -- not sure if this is unilaterally true... - aResult = PR_TRUE; - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::ChildCount(PRInt32& aResult) const -{ - nsresult rv; - if (mChildrenMustBeGenerated) { - if (NS_FAILED(rv = GenerateChildren())) - return rv; - } - - aResult = mChildren->Count(); - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::ChildAt(PRInt32 aIndex, nsIContent*& aResult) const -{ - nsresult rv; - if (mChildrenMustBeGenerated) { - if (NS_FAILED(rv = GenerateChildren())) - return rv; - } - - nsISupports* obj = mChildren->ElementAt(aIndex); - nsIContent* content; - rv = obj->QueryInterface(kIContentIID, (void**) &content); - obj->Release(); - - aResult = content; - return rv; -} - -NS_IMETHODIMP -nsRDFElement::IndexOf(nsIContent* aPossibleChild, PRInt32& aResult) const -{ - nsresult rv; - if (mChildrenMustBeGenerated) { - if (NS_FAILED(rv = GenerateChildren())) - return rv; - } - aResult = mChildren->IndexOf(aPossibleChild); - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::InsertChildAt(nsIContent* aKid, PRInt32 aIndex, PRBool aNotify) -{ - NS_PRECONDITION(aKid, "null ptr"); - if (! aKid) - return NS_ERROR_NULL_POINTER; - - NS_PRECONDITION(mChildren, "uninitialized"); - if (! mChildren) - return NS_ERROR_NOT_INITIALIZED; - - if (! mChildren->InsertElementAt(aKid, aIndex)) { - PR_ASSERT(0); - return NS_ERROR_ILLEGAL_VALUE; - } - aKid->SetParent(this); - if (aNotify) { - // XXX deal with aNotify - } - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::ReplaceChildAt(nsIContent* aKid, PRInt32 aIndex, PRBool aNotify) -{ - NS_PRECONDITION(aKid, "null ptr"); - if (! aKid) - return NS_ERROR_NULL_POINTER; - - NS_PRECONDITION(mChildren, "uninitialized"); - if (! mChildren) - return NS_ERROR_NOT_INITIALIZED; - - if (! mChildren->ReplaceElementAt(aKid, aIndex)) { - PR_ASSERT(0); - return NS_ERROR_ILLEGAL_VALUE; - } - aKid->SetParent(this); - if (aNotify) { - // XXX deal with aNotify - } - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::AppendChildTo(nsIContent* aKid, PRBool aNotify) -{ - NS_PRECONDITION(aKid, "null ptr"); - if (! aKid) - return NS_ERROR_NULL_POINTER; - - NS_PRECONDITION(mChildren, "uninitialized"); - if (! mChildren) - return NS_ERROR_NOT_INITIALIZED; - - mChildren->AppendElement(aKid); - aKid->SetParent(this); - if (aNotify) { - // XXX deal with aNotify - } - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify) -{ - NS_PRECONDITION(mChildren, "uninitialized"); - if (! mChildren) - return NS_ERROR_NOT_INITIALIZED; - - // XXX probably need to SetParent(nsnull) on the guy. - - if (! mChildren->RemoveElementAt(aIndex)) { - PR_ASSERT(0); - return NS_ERROR_ILLEGAL_VALUE; - } - if (aNotify) { - // XXX deal with aNotify - } - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::IsSynthetic(PRBool& aResult) -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::GetTag(nsIAtom*& aResult) const -{ - // XXX the problem with this is that we only have a - // fully-qualified URI, not "just" the tag. And I think the style - // system ain't gonna work right with that. So this is a complete - // hack to parse what probably _was_ the tag out. - nsAutoString s = mTag; - PRInt32 index; - - if ((index = s.RFind('#')) >= 0) - s.Cut(0, index + 1); - else if ((index = s.RFind('/')) >= 0) - s.Cut(0, index + 1); - -// s.ToLowerCase(); // because that's how CSS works XXX ONLY FOR HTML CONTENT, XML (as well as HTML in XML is case sensitive) - - aResult = NS_NewAtom(s); - return NS_OK; -} - - -// XXX attribute code swiped from nsGenericContainerElement -// this class could probably just use nsGenericContainerElement -// needed to maintain attribute namespace ID as well as ordering -NS_IMETHODIMP -nsRDFElement::SetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, - const nsString& aValue, - PRBool aNotify) -{ - NS_ASSERTION(kNameSpaceID_Unknown != aNameSpaceID, "must have name space ID"); - if (kNameSpaceID_Unknown == aNameSpaceID) { - return NS_ERROR_ILLEGAL_VALUE; - } - NS_ASSERTION(nsnull != aName, "must have attribute name"); - if (nsnull == aName) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_ERROR_OUT_OF_MEMORY; - - if (nsnull == mAttributes) { - mAttributes = new nsVoidArray(); - } - if (nsnull != mAttributes) { - nsGenericAttribute* attr; - PRInt32 index; - PRInt32 count = mAttributes->Count(); - for (index = 0; index < count; index++) { - attr = (nsGenericAttribute*)mAttributes->ElementAt(index); - if ((aNameSpaceID == attr->mNameSpaceID) && (aName == attr->mName)) { - attr->mValue = aValue; - rv = NS_OK; - break; - } - } - - if (index >= count) { // didn't find it - attr = new nsGenericAttribute(aNameSpaceID, aName, aValue); - if (nsnull != attr) { - mAttributes->AppendElement(attr); - rv = NS_OK; - } - } - // XXX notify doc? - } - - return rv; -} - - -NS_IMETHODIMP -nsRDFElement::GetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, nsString& aResult) const -{ - NS_ASSERTION(nsnull != aName, "must have attribute name"); - if (nsnull == aName) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_CONTENT_ATTR_NOT_THERE; - - if (nsnull != mAttributes) { - PRInt32 count = mAttributes->Count(); - PRInt32 index; - for (index = 0; index < count; index++) { - const nsGenericAttribute* attr = (const nsGenericAttribute*)mAttributes->ElementAt(index); - if ((attr->mNameSpaceID == aNameSpaceID) && (attr->mName == aName)) { - aResult = attr->mValue; - if (0 < aResult.Length()) { - rv = NS_CONTENT_ATTR_HAS_VALUE; - } - else { - rv = NS_CONTENT_ATTR_NO_VALUE; - } - break; - } - } - } - -#if defined(CREATE_PROPERTIES_AS_ATTRIBUTES) - // XXX I'm not sure if we should support properties as attributes - // or not... - nsIRDFResourceManager* mgr = nsnull; - if (NS_FAILED(rv = nsServiceManager::GetService(kRDFResourceManagerCID, - kIRDFResourceManagerIID, - (nsISupports**) &mgr))) - return rv; - - nsIRDFDataBase* db = nsnull; - nsIRDFNode* property = nsnull; - nsIRDFNode* value = nsnull; - - if (NS_FAILED(rv = mDocument->GetDataBase(db))) - goto done; - - if (NS_FAILED(rv = mgr->GetNode(aName, property))) - goto done; - - // XXX Only returns the first value. yer screwed for - // multi-attributes, I guess. - - if (NS_FAILED(rv = db->GetTarget(mResource, property, PR_TRUE, value))) - goto done; - - rv = value->GetStringValue(aResult); - -done: - NS_IF_RELEASE(property); - NS_IF_RELEASE(value); - NS_IF_RELEASE(db); - nsServiceManager::ReleaseService(kRDFResourceManagerCID, mgr); - -#endif // defined(CREATE_PROPERTIES_AS_ATTRIBUTES) - return rv; -} - -NS_IMETHODIMP -nsRDFElement::UnsetAttribute(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNotify) -{ - NS_ASSERTION(nsnull != aName, "must have attribute name"); - if (nsnull == aName) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_OK; - - if (nsnull != mAttributes) { - PRInt32 count = mAttributes->Count(); - PRInt32 index; - for (index = 0; index < count; index++) { - nsGenericAttribute* attr = (nsGenericAttribute*)mAttributes->ElementAt(index); - if ((attr->mNameSpaceID == aNameSpaceID) && (attr->mName == aName)) { - mAttributes->RemoveElementAt(index); - delete attr; - break; - } - } - -// XXX notify document?? - } - - return rv; -} - -NS_IMETHODIMP -nsRDFElement::GetAttributeNameAt(PRInt32 aIndex, - PRInt32& aNameSpaceID, - nsIAtom*& aName) const -{ - if (nsnull != mAttributes) { - nsGenericAttribute* attr = (nsGenericAttribute*)mAttributes->ElementAt(aIndex); - if (nsnull != attr) { - aNameSpaceID = attr->mNameSpaceID; - aName = attr->mName; - NS_IF_ADDREF(aName); - return NS_OK; - } - } - aNameSpaceID = kNameSpaceID_None; - aName = nsnull; - return NS_ERROR_ILLEGAL_VALUE; - -#if defined(CREATE_PROPERTIES_AS_ATTRIBUTES) - // XXX I'm not sure if we should support attributes or not... - - nsIRDFResourceManager* mgr = nsnull; - if (NS_FAILED(rv = nsServiceManager::GetService(kRDFResourceManagerCID, - kIRDFResourceManagerIID, - (nsISupports**) &mgr))) - return rv; - - nsIRDFDataBase* db = nsnull; - nsIRDFCursor* properties = nsnull; - PRBool moreProperties; - - if (NS_FAILED(rv = mDocument->GetDataBase(db))) - goto done; - - if (NS_FAILED(rv = db->ArcLabelsOut(mResource, properties))) - goto done; - - while (NS_SUCCEEDED(rv = properties->HasMoreElements(moreProperties)) && moreProperties) { - nsIRDFNode* property = nsnull; - PRBool tv; - - if (NS_FAILED(rv = properties->GetNext(property, tv /* ignored */))) - break; - - nsAutoString uri; - if (NS_SUCCEEDED(rv = property->GetStringValue(uri))) { - nsIAtom* atom = NS_NewAtom(uri); - if (atom) { - aArray->AppendElement(atom); - ++aResult; - } else { - rv = NS_ERROR_OUT_OF_MEMORY; - } - } - - NS_RELEASE(property); - - if (NS_FAILED(rv)) - break; - } - -done: - NS_IF_RELEASE(properties); - NS_IF_RELEASE(db); - nsServiceManager::ReleaseService(kRDFResourceManagerCID, mgr); - - return rv; -#endif // defined(CREATE_PROPERTIES_AS_ATTRIBUTES) -} - -NS_IMETHODIMP -nsRDFElement::GetAttributeCount(PRInt32& aResult) const -{ - nsresult rv = NS_OK; - if (nsnull != mAttributes) { - aResult = mAttributes->Count(); - } - else { - aResult = 0; - } - -#if defined(CREATE_PROPERTIES_AS_ATTRIBUTES) - PR_ASSERT(0); // XXX need to write this... -#endif // defined(CREATE_PROPERTIES_AS_ATTRIBUTES) - - return rv; -} - - -static void -rdf_Indent(FILE* out, PRInt32 aIndent) -{ - for (PRInt32 i = aIndent; --i >= 0; ) fputs(" ", out); -} - -NS_IMETHODIMP -nsRDFElement::List(FILE* out, PRInt32 aIndent) const -{ - nsresult rv; - - { - nsIAtom* tag; - if (NS_FAILED(rv = GetTag(tag))) - return rv; - - rdf_Indent(out, aIndent); - fputs("[RDF ", out); - fputs(tag->GetUnicode(), out); - - NS_RELEASE(tag); - } - - { - PRInt32 nattrs; - - if (NS_SUCCEEDED(rv = GetAttributeCount(nattrs))) { - for (PRInt32 i = 0; i < nattrs; ++i) { - nsIAtom* attr = nsnull; - PRInt32 nameSpaceID; - GetAttributeNameAt(i, nameSpaceID, attr); - - - nsAutoString v; - GetAttribute(nameSpaceID, attr, v); - - nsAutoString s; - attr->ToString(s); - NS_RELEASE(attr); - - fputs(" ", out); - fputs(s, out); - fputs("=", out); - fputs(v, out); - } - } - - if (NS_FAILED(rv)) - return rv; - } - - fputs("]\n", out); - - { - PRInt32 nchildren; - if (NS_FAILED(rv = ChildCount(nchildren))) - return rv; - - for (PRInt32 i = 0; i < nchildren; ++i) { - nsIContent* child; - if (NS_FAILED(rv = ChildAt(i, child))) - return rv; - - rv = child->List(out, aIndent + 1); - NS_RELEASE(child); - - if (NS_FAILED(rv)) - return rv; - } - } - - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::BeginConvertToXIF(nsXIFConverter& aConverter) const -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::ConvertContentToXIF(nsXIFConverter& aConverter) const -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::FinishConvertToXIF(nsXIFConverter& aConverter) const -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsRDFElement::SizeOf(nsISizeOfHandler* aHandler) const -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - - -NS_IMETHODIMP -nsRDFElement::HandleDOMEvent(nsIPresContext& aPresContext, - nsEvent* aEvent, - nsIDOMEvent** aDOMEvent, - PRUint32 aFlags, - nsEventStatus& aEventStatus) -{ - return NS_OK; -} - - - -NS_IMETHODIMP -nsRDFElement::RangeAdd(nsIDOMRange& aRange) -{ - // rdf content does not yet support DOM ranges - return NS_OK; -} - - - -NS_IMETHODIMP -nsRDFElement::RangeRemove(nsIDOMRange& aRange) -{ - // rdf content does not yet support DOM ranges - return NS_OK; -} - - -NS_IMETHODIMP -nsRDFElement::GetRangeList(nsVoidArray*& aResult) const -{ - // rdf content does not yet support DOM ranges - return NS_OK; -} - - -//////////////////////////////////////////////////////////////////////// -// nsIXMLContent - -NS_IMETHODIMP -nsRDFElement::SetNameSpacePrefix(nsIAtom* aNameSpacePrefix) -{ - NS_IF_RELEASE(mNameSpacePrefix); - mNameSpacePrefix = aNameSpacePrefix; - NS_IF_ADDREF(mNameSpacePrefix); - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::GetNameSpacePrefix(nsIAtom*& aNameSpacePrefix) const -{ - aNameSpacePrefix = mNameSpacePrefix; - NS_IF_ADDREF(mNameSpacePrefix); - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::SetNameSpaceID(PRInt32 aNameSpaceID) -{ - mNameSpaceID = aNameSpaceID; - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::GetNameSpaceID(PRInt32& aNameSpaceID) const -{ - aNameSpaceID = mNameSpaceID; - return NS_OK; -} - - -//////////////////////////////////////////////////////////////////////// -// nsIRDFContent - -NS_IMETHODIMP -nsRDFElement::Init(nsIRDFDocument* doc, - const nsString& aTag, - nsIRDFResource* resource, - PRBool childrenMustBeGenerated) -{ - NS_PRECONDITION(doc, "null ptr"); - - // XXX Not using this because of a hack in nsRDFTreeDocument: need - // to expose generic XML elements! - //NS_PRECONDITION(resource, "null ptr"); - - if (!doc /* || !resource // XXX ibid */) - return NS_ERROR_NULL_POINTER; - - mTag = aTag; - - mDocument = doc; // not refcounted - - mResource = resource; - NS_IF_ADDREF(mResource); - - mChildrenMustBeGenerated = childrenMustBeGenerated; - - nsresult rv; - if (NS_FAILED(rv = NS_NewISupportsArray(&mChildren))) - return rv; - - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::SetResource(const nsString& aURI) -{ - if (mResource) - return NS_ERROR_ALREADY_INITIALIZED; - - nsresult rv; - - nsIRDFResourceManager* mgr = nsnull; - if (NS_FAILED(rv = nsServiceManager::GetService(kRDFResourceManagerCID, - kIRDFResourceManagerIID, - (nsISupports**) &mgr))) - return rv; - - rv = mgr->GetUnicodeResource(aURI, &mResource); // implicit AddRef() - nsServiceManager::ReleaseService(kRDFResourceManagerCID, mgr); - - return rv; -} - -NS_IMETHODIMP -nsRDFElement::GetResource(nsString& rURI) const -{ - if (! mResource) - return NS_ERROR_NOT_INITIALIZED; - - const char* s; - nsresult rv; - if (NS_FAILED(rv = mResource->GetValue(&s))) - return rv; - - rURI = s; - return NS_OK; -} - - -NS_IMETHODIMP -nsRDFElement::SetResource(nsIRDFResource* aResource) -{ - NS_PRECONDITION(aResource, "null ptr"); - NS_PRECONDITION(!mResource, "already initialized"); - - if (!aResource) - return NS_ERROR_NULL_POINTER; - - if (mResource) - return NS_ERROR_ALREADY_INITIALIZED; - - mResource = aResource; - NS_ADDREF(mResource); - return NS_OK; -} - - -NS_IMETHODIMP -nsRDFElement::GetResource(nsIRDFResource*& aResource) -{ - if (! mResource) - return NS_ERROR_NOT_INITIALIZED; - - aResource = mResource; - NS_ADDREF(aResource); - return NS_OK; -} - -NS_IMETHODIMP -nsRDFElement::SetProperty(const nsString& aPropertyURI, const nsString& aValue) -{ - if (!mResource || !mDocument) - return NS_ERROR_NOT_INITIALIZED; - - const char* s; - mResource->GetValue(&s); - nsAutoString resource = s; - -#ifdef DEBUG_waterson - char buf[256]; - printf("assert [\n"); - printf(" %s\n", resource.ToCString(buf, sizeof(buf))); - printf(" %s\n", aPropertyURI.ToCString(buf, sizeof(buf))); - printf(" %s\n", aValue.ToCString(buf, sizeof(buf))); - printf("]\n"); -#endif - - nsresult rv; - nsIRDFResourceManager* mgr = nsnull; - - if (NS_FAILED(rv = nsServiceManager::GetService(kRDFResourceManagerCID, - kIRDFResourceManagerIID, - (nsISupports**) &mgr))) - return rv; - - nsIRDFResource* property = nsnull; - nsIRDFLiteral* value = nsnull; - nsIRDFDataBase* db = nsnull; - - if (NS_FAILED(rv = mgr->GetUnicodeResource(aPropertyURI, &property))) - goto done; - - // XXX assume it's a literal? - if (NS_FAILED(rv = mgr->GetLiteral(aValue, &value))) - goto done; - - if (NS_FAILED(rv = mDocument->GetDataBase(db))) - goto done; - - rv = db->Assert(mResource, property, value, PR_TRUE); - -done: - NS_IF_RELEASE(db); - NS_IF_RELEASE(value); - NS_IF_RELEASE(property); - nsServiceManager::ReleaseService(kRDFResourceManagerCID, mgr); - - return rv; -} - -NS_IMETHODIMP -nsRDFElement::GetProperty(const nsString& aPropertyURI, nsString& rValue) const -{ - PR_ASSERT(0); - return NS_ERROR_NOT_IMPLEMENTED; -} - - -//////////////////////////////////////////////////////////////////////// -// Implementation methods - - -nsresult -nsRDFElement::GenerateChildren(void) const -{ - nsresult rv; - - if (!mResource || !mDocument) - return NS_ERROR_NOT_INITIALIZED; - - // XXX hack because we can't use "mutable" - nsRDFElement* unconstThis = NS_CONST_CAST(nsRDFElement*, this); - - if (! unconstThis->mChildren) { - if (NS_FAILED(rv = NS_NewISupportsArray(&unconstThis->mChildren))) - return rv; - } - else { - unconstThis->mChildren->Clear(); - } - - // Clear this value *first*, so we can re-enter the nsIContent - // getters if needed. - unconstThis->mChildrenMustBeGenerated = PR_FALSE; - - if (NS_FAILED(rv = mDocument->CreateChildren(unconstThis))) { - // Well, maybe it was a transient error. This'll let use try - // again some time in the future. - unconstThis->mChildrenMustBeGenerated = PR_TRUE; - return rv; - } - - return NS_OK; -} - diff --git a/mozilla/rdf/src/nsRDFFactory.cpp b/mozilla/rdf/src/nsRDFFactory.cpp deleted file mode 100644 index 3cfc514b048..00000000000 --- a/mozilla/rdf/src/nsRDFFactory.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include "nsISupports.h" -#include "nsIFactory.h" -#include "nsIRDFResourceManager.h" -#include "nsRDFBuiltInDataSources.h" -#include "nsRDFDocument.h" -#include "nsRDFCID.h" -#include "nsIServiceManager.h" - -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); - -static NS_DEFINE_CID(kRDFBookmarkDataSourceCID, NS_RDFBOOKMARKDATASOURCE_CID); -static NS_DEFINE_CID(kRDFHTMLDocumentCID, NS_RDFHTMLDOCUMENT_CID); -static NS_DEFINE_CID(kRDFMemoryDataSourceCID, NS_RDFMEMORYDATASOURCE_CID); -static NS_DEFINE_CID(kRDFResourceManagerCID, NS_RDFRESOURCEMANAGER_CID); -static NS_DEFINE_CID(kRDFSimpleDataBaseCID, NS_RDFSIMPLEDATABASE_CID); -static NS_DEFINE_CID(kRDFStreamDataSourceCID, NS_RDFSTREAMDATASOURCE_CID); -static NS_DEFINE_CID(kRDFTreeDocumentCID, NS_RDFTREEDOCUMENT_CID); - -class RDFFactoryImpl : public nsIFactory -{ -public: - RDFFactoryImpl(const nsCID &aClass); - - // nsISupports methods - NS_DECL_ISUPPORTS - - // nsIFactory methods - NS_IMETHOD CreateInstance(nsISupports *aOuter, - const nsIID &aIID, - void **aResult); - - NS_IMETHOD LockFactory(PRBool aLock); - -protected: - virtual ~RDFFactoryImpl(); - -private: - nsCID mClassID; -}; - -//////////////////////////////////////////////////////////////////////// - -RDFFactoryImpl::RDFFactoryImpl(const nsCID &aClass) -{ - NS_INIT_REFCNT(); - mClassID = aClass; -} - -RDFFactoryImpl::~RDFFactoryImpl() -{ - NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction"); -} - -NS_IMETHODIMP -RDFFactoryImpl::QueryInterface(const nsIID &aIID, - void **aResult) -{ - if (! aResult) - return NS_ERROR_NULL_POINTER; - - // Always NULL result, in case of failure - *aResult = nsnull; - - if (aIID.Equals(kISupportsIID)) { - *aResult = NS_STATIC_CAST(nsISupports*, this); - AddRef(); - return NS_OK; - } else if (aIID.Equals(kIFactoryIID)) { - *aResult = NS_STATIC_CAST(nsIFactory*, this); - AddRef(); - return NS_OK; - } - return NS_NOINTERFACE; -} - -NS_IMPL_ADDREF(RDFFactoryImpl); -NS_IMPL_RELEASE(RDFFactoryImpl); - - -NS_IMETHODIMP -RDFFactoryImpl::CreateInstance(nsISupports *aOuter, - const nsIID &aIID, - void **aResult) -{ - if (! aResult) - return NS_ERROR_NULL_POINTER; - - if (aOuter) - return NS_ERROR_NO_AGGREGATION; - - *aResult = nsnull; - - nsresult rv; - PRBool wasRefCounted = PR_TRUE; - nsISupports *inst = nsnull; - if (mClassID.Equals(kRDFResourceManagerCID)) { - if (NS_FAILED(rv = NS_NewRDFResourceManager((nsIRDFResourceManager**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFMemoryDataSourceCID)) { - if (NS_FAILED(rv = NS_NewRDFMemoryDataSource((nsIRDFDataSource**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFStreamDataSourceCID)) { - if (NS_FAILED(rv = NS_NewRDFStreamDataSource((nsIRDFDataSource**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFBookmarkDataSourceCID)) { - if (NS_FAILED(rv = NS_NewRDFBookmarkDataSource((nsIRDFDataSource**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFSimpleDataBaseCID)) { - if (NS_FAILED(rv = NS_NewRDFSimpleDataBase((nsIRDFDataBase**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFHTMLDocumentCID)) { - if (NS_FAILED(rv = NS_NewRDFHTMLDocument((nsIRDFDocument**) &inst))) - return rv; - } - else if (mClassID.Equals(kRDFTreeDocumentCID)) { - if (NS_FAILED(rv = NS_NewRDFTreeDocument((nsIRDFDocument**) &inst))) - return rv; - } - else { - return NS_ERROR_NO_INTERFACE; - } - - if (! inst) - return NS_ERROR_OUT_OF_MEMORY; - - if (NS_FAILED(rv = inst->QueryInterface(aIID, aResult))) - // We didn't get the right interface, so clean up - delete inst; - - if (wasRefCounted) - NS_IF_RELEASE(inst); - - return rv; -} - -nsresult RDFFactoryImpl::LockFactory(PRBool aLock) -{ - // Not implemented in simplest case. - return NS_OK; -} - -//////////////////////////////////////////////////////////////////////// - - - -// return the proper factory to the caller -extern "C" PR_IMPLEMENT(nsresult) -NSGetFactory(const nsCID &aClass, nsISupports* servMgr, nsIFactory **aFactory) -{ - if (! aFactory) - return NS_ERROR_NULL_POINTER; - - *aFactory = new RDFFactoryImpl(aClass); - if (aFactory == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - - return (*aFactory)->QueryInterface(kIFactoryIID, (void**)aFactory); -} - diff --git a/mozilla/rdf/src/nsRDFHTMLDocument.cpp b/mozilla/rdf/src/nsRDFHTMLDocument.cpp deleted file mode 100644 index 2ebc1a4f477..00000000000 --- a/mozilla/rdf/src/nsRDFHTMLDocument.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and limitations - * under the License. - * - * The Original Code is Mozilla Communicator client code. - * - * The Initial Developer of the Original Code is Netscape Communications - * Corporation. Portions created by Netscape are Copyright (C) 1998 - * Netscape Communications Corporation. All Rights Reserved. - */ - -/* - - This builds an HTML-like model, complete with text nodes, that can - be displayed in a vanilla HTML content viewer. You can apply CSS2 - styles to the text, etc. - - */ - -#include "nsIRDFContent.h" -#include "nsIRDFCursor.h" -#include "nsIRDFDataBase.h" -#include "nsIRDFNode.h" -#include "nsIRDFResourceManager.h" -#include "nsIServiceManager.h" -#include "nsINameSpaceManager.h" -#include "nsISupportsArray.h" -#include "nsRDFDocument.h" -#include "rdfutil.h" - -//////////////////////////////////////////////////////////////////////// - -static NS_DEFINE_IID(kIRDFResourceIID, NS_IRDFRESOURCE_IID); -static NS_DEFINE_IID(kIRDFLiteralIID, NS_IRDFLITERAL_IID); - -//////////////////////////////////////////////////////////////////////// - -class RDFHTMLDocumentImpl : public nsRDFDocument { -public: - RDFHTMLDocumentImpl(); - virtual ~RDFHTMLDocumentImpl(); - -protected: - nsresult AddTreeChild(nsIRDFContent* parent, - const nsString& tag, - nsIRDFResource* property, - nsIRDFResource* value); - - nsresult AddLeafChild(nsIRDFContent* parent, - const nsString& tag, - nsIRDFResource* property, - nsIRDFLiteral* value); - - virtual nsresult AddChild(nsIRDFContent* parent, - nsIRDFResource* property, - nsIRDFNode* value); -}; - -//////////////////////////////////////////////////////////////////////// - -static nsIAtom* kIdAtom; - -RDFHTMLDocumentImpl::RDFHTMLDocumentImpl(void) -{ - if (nsnull == kIdAtom) { - kIdAtom = NS_NewAtom("id"); - } - else { - NS_ADDREF(kIdAtom); - } -} - -RDFHTMLDocumentImpl::~RDFHTMLDocumentImpl(void) -{ - nsrefcnt refcnt; - NS_RELEASE2(kIdAtom, refcnt); -} - -nsresult -RDFHTMLDocumentImpl::AddTreeChild(nsIRDFContent* parent, - const nsString& tag, - nsIRDFResource* property, - nsIRDFResource* value) -{ - // If it's a tree property, then create a child element whose - // value is the value of the property. We'll also attach an "ID=" - // attribute to the new child; e.g., - // - // - // - // - // - // ... - // - - nsresult rv; - const char* p; - nsAutoString s; - nsIRDFContent* child = nsnull; - - // PR_TRUE indicates that we want the child to dynamically - // generate its own kids. - if (NS_FAILED(rv = NewChild(tag, value, child, PR_TRUE))) - goto done; - - if (NS_FAILED(rv = value->GetValue(&p))) - goto done; - - s = p; - - if (NS_FAILED(rv = child->SetAttribute(kNameSpaceID_HTML, kIdAtom, s, PR_FALSE))) - goto done; - - rv = parent->AppendChildTo(child, PR_TRUE); - -done: - NS_IF_RELEASE(child); - return rv; -} - - -nsresult -RDFHTMLDocumentImpl::AddLeafChild(nsIRDFContent* parent, - const nsString& tag, - nsIRDFResource* property, - nsIRDFLiteral* value) -{ - // Otherwise, it's not a tree property. So we'll just create a - // new element for the property, and a simple text node for - // its value; e.g., - // - // - // value - // ... - // - - nsresult rv; - nsIRDFContent* child = nsnull; - - if (NS_FAILED(rv = NewChild(tag, property, child, PR_FALSE))) - goto done; - - if (NS_FAILED(rv = AttachTextNode(child, value))) - goto done; - - rv = parent->AppendChildTo(child, PR_TRUE); - -done: - NS_IF_RELEASE(child); - return rv; -} - -nsresult -RDFHTMLDocumentImpl::AddChild(nsIRDFContent* parent, - nsIRDFResource* property, - nsIRDFNode* value) -{ - nsresult rv; - - // The tag we'll use for the new child will be the string value of - // the property. - const char* s; - if (NS_FAILED(rv = property->GetValue(&s))) - return rv; - - nsAutoString tag = s; - - nsIRDFResource* valueResource; - if (NS_SUCCEEDED(rv = value->QueryInterface(kIRDFResourceIID, (void**) &valueResource))) { - if (IsTreeProperty(property) || rdf_IsContainer(mResourceMgr, mDB, valueResource)) { - rv = AddTreeChild(parent, tag, property, valueResource); - NS_RELEASE(valueResource); - return rv; - } - NS_RELEASE(valueResource); - } - - nsIRDFLiteral* valueLiteral; - if (NS_SUCCEEDED(rv = value->QueryInterface(kIRDFLiteralIID, (void**) &valueLiteral))) { - rv = AddLeafChild(parent, tag, property, valueLiteral); - NS_RELEASE(valueLiteral); - } - return rv; -} - - -//////////////////////////////////////////////////////////////////////// - -nsresult NS_NewRDFHTMLDocument(nsIRDFDocument** result) -{ - nsIRDFDocument* doc = new RDFHTMLDocumentImpl(); - if (! doc) - return NS_ERROR_OUT_OF_MEMORY; - - NS_ADDREF(doc); - *result = doc; - return NS_OK; -} diff --git a/mozilla/rdf/src/rdf-int.h b/mozilla/rdf/src/rdf-int.h deleted file mode 100644 index 63b2639930c..00000000000 --- a/mozilla/rdf/src/rdf-int.h +++ /dev/null @@ -1,465 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - - - -#ifndef _RDF_RDF_INT_H -#define _RDF_RDF_INT_H - - -#define WINTEST 0 -#define DBMTEST 1 -#define FSTEST 1 - - -#define RDF_BUF_SIZE 4096 -#define LINE_SIZE 512 -#define RDF_BOOKMARKS 128 -#define RDF_MCF 129 -#define RDF_XML 130 - -#include -#include -#include "rdf.h" -#include "nspr.h" -#include "plhash.h" - -#include "rdfstr.h" - - - -#ifndef true -#define true PR_TRUE -#endif -#ifndef false -#define false PR_FALSE -#endif -#define null NULL -#define nullp(x) (((void*)x) == ((void*)0)) -#define LookupResource(x) ((RDF_Resource)PL_HashTableLookup(resourceHash, x)); - -#define noRDFErr 0 -#define noMoreValuesErr 1 - -#define MAX_ATTRIBUTES 64 - -#define RDF_RT 0 -#define LFS_RT 1 -#define FTP_RT 3 -#define ES_RT 4 -#define SEARCH_RT 5 -#define HISTORY_RT 6 -#define LDAP_RT 7 -#define PM_RT 8 -#define RDM_RT 9 -#define IM_RT 10 -#define CACHE_RT 11 -#define ATALK_RT 12 -#define ATALKVIRTUAL_RT 13 -#define COOKIE_RT 14 -#define JSEC_RT 15 -#define PMF_RT 16 - -#define CHECK_VAR(var, return_value) {if (var == NULL) {/*xxx PR_ASSERT(var); */ return return_value;}} -#define CHECK_VAR1(var) {if (var == NULL) {/*xxx PR_ASSERT(var);*/ return;}} - - -#ifdef XP_WIN -#define FS_URL_OFFSET 8 -#else -#define FS_URL_OFFSET 7 -#endif - - -#define MAX_URL_SIZE 300 - - -#define convertString2UTF8(charsetid, s) \ - (s != NULL ? \ - INTL_ConvertLineWithoutAutoDetect( \ - (charsetid) , \ - CS_UTF8, \ - (unsigned char*)(s), \ - RDF_STRLEN(s) \ - ) : NULL) - -#define stringEquals(x, y) (strcmp(x, y) ==0) -/*#define stringAppend(x, y) XP_AppendStr(x,y) */ - -NSPR_BEGIN_EXTERN_C - -struct RDF_ResourceStruct { - char* url; - uint8 type; - uint8 flags; - struct RDF_AssertionStruct* rarg1; - struct RDF_AssertionStruct* rarg2; - struct RDF_ListStruct* rdf; - void* pdata; -} ; - -#define RDF_GET_SLOT_VALUES_QUERY 0x01 -#define RDF_GET_SLOT_VALUE_QUERY 0x02 -#define RDF_FIND_QUERY 0x03 -#define RDF_ARC_LABELS_IN_QUERY 0x04 -#define RDF_ARC_LABELS_OUT_QUERY 0x05 - -struct RDF_CursorStruct { - RDF_Resource u; - RDF_Resource s; - RDF_Resource match; - void *value; - struct RDF_CursorStruct* current; - RDF rdf; - void* pdata; - PRBool tv; - PRBool inversep; - RDF_ValueType type; - int16 count; - uint16 size; - uint8 queryType; -}; - -typedef uint8 RDF_BT; - -#define getMem(x) PR_Calloc(1,(x)) -#define freeMem(x) PR_Free((x)) - -struct RDF_AssertionStruct { - RDF_Resource u; - RDF_Resource s; - void* value; - PRBool tv; - RDF_ValueType type; - uint8 tags; - struct RDF_AssertionStruct* next; - struct RDF_AssertionStruct* invNext; - struct RDF_TranslatorStruct* db; -} ; - - -typedef struct RDF_AssertionStruct *Assertion; -typedef struct RDF_FileStruct *RDFFile; - - -typedef PRBool (*assertProc)(RDFT r, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type, PRBool tv); -typedef PRBool (*hasAssertionProc)(RDFT r, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv); -typedef void* (*getSlotValueProc)(RDFT r, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -typedef RDF_Cursor (*getSlotValuesProc)(RDFT r, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv); -typedef PRBool (*unassertProc)(RDFT r, RDF_Resource u, RDF_Resource s, void* value, RDF_ValueType type); -typedef void* (*nextItemProc)(RDFT r, RDF_Cursor c) ; -typedef RDF_Error (*disposeCursorProc)(RDFT r, RDF_Cursor c); -typedef RDF_Error (*disposeResourceProc)(RDFT r, RDF_Resource u); -typedef RDF_Error (*updateProc)(RDFT r, RDF_Resource u); -typedef RDF_Error (*destroyProc)(struct RDF_TranslatorStruct*); -typedef RDF_Cursor (*arcLabelsOutProc)(RDFT r, RDF_Resource u); -typedef RDF_Cursor (*arcLabelsInProc)(RDFT r, RDF_Resource u); -typedef PRBool (*fAssert1Proc) (RDFFile file, RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -typedef PRBool (*fUnAssert1Proc) (RDFFile file, RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) ; -typedef void (*accessFileProc) (RDFT rdf, RDF_Resource u, RDF_Resource s, PRBool inversep) ; - -struct RDF_ListStruct { - struct RDF_DBStruct* rdf; - struct RDF_ListStruct* next; -} ; - -typedef struct RDF_ListStruct *RDFL; - -struct RDF_TranslatorStruct { - RDFL rdf; - char* url; - void* pdata; - destroyProc destroy; - hasAssertionProc hasAssertion; - unassertProc unassert; - assertProc assert; - getSlotValueProc getSlotValue; - getSlotValuesProc getSlotValues; - nextItemProc nextValue; - disposeCursorProc disposeCursor; - disposeResourceProc disposeResource; - arcLabelsInProc arcLabelsIn; - arcLabelsInProc arcLabelsOut; - accessFileProc possiblyAccessFile; - updateProc update; - RDFL dependents; - RDFL dependentOn; -}; - - -extern PLHashTable* resourceHash; -extern PLHashTable* dataSourceHash; -extern char* gNavCntrUrl; -struct RDF_DBStruct { - int32 numTranslators; - int32 translatorArraySize; - RDFT* translators; - struct RDF_FileStruct* files; - struct RDF_NotificationStruct* notifs; - void* context; -}; - -extern RDFT gLocalStore; -extern RDFT gRemoteStore; -extern RDFT gSessionDB; -extern size_t gCoreVocabSize; -extern RDF_Resource* gAllVocab; - -/* reading rdf */ - -#define HEADERS 1 -#define BODY 2 - - -struct XMLNameSpaceStruct { - char* as; - char* url; - struct XMLNameSpaceStruct* next; -} ; - -typedef struct XMLNameSpaceStruct *XMLNameSpace; - -#define RDF_MAX_NUM_FILE_TOKENS 8 - -struct RDF_FileStructTokens { - RDF_Resource token; - RDF_ValueType type; - int16 tokenNum; - char *data; -}; - -struct RDF_FileStruct { - char* url; - - RDF_Resource currentResource; - RDF_Resource top; - RDF_Resource rtop; - char* currentSlot; - PRBool genlAdded; - PRBool localp; - char* storeAway; - char* line; - XMLNameSpace namespaces; - uint16 status; - char* holdOver; - int32 lineSize; - RDF_Resource stack[16]; - uint16 depth ; - - - uint16 resourceCount; - uint16 resourceListSize; - uint16 assertionCount; - uint16 assertionListSize; - RDF_Resource* resourceList; - Assertion* assertionList; - char* updateURL; - char* postURL; - - PRTime lastReadTime; - PRTime *expiryTime; - uint8 fileType; - PRBool locked; - RDF_Resource lastItem; - - - PRBool tv; - fAssert1Proc assert; - fUnAssert1Proc unassert; - RDFT db; - PRBool refreshingp; - - void* pdata; - - int16 numFileTokens; - struct RDF_FileStructTokens tokens[RDF_MAX_NUM_FILE_TOKENS]; - struct RDF_FileStruct* next; -}; - -RDFT MakeColumnStore (char* url); -RDF newNavCenterDB(); -void addToResourceList (RDFFile f, RDF_Resource u); - -void walkThroughAllBookmarks (RDF_Resource u); -RDFT NewRemoteStore (char* url); -RDF_Resource nextFindValue (RDF_Cursor c) ; -PRBool isTypeOf (RDF rdf, RDF_Resource u, RDF_Resource v); -RDF getRDFDB (void); -RDFFile readRDFFile (char* url, RDF_Resource top, PRBool localp, RDFT rdf); -void sendNotifications (RDF rdf, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv, char* ds); -void sendNotifications2 (RDFT rdf, RDF_EventType opType, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -RDF_Error exitRDF (RDF rdf); -void gcRDFFileInt (RDFFile f); -void parseNextBkBlob(RDFFile f, char* blob, int32 blobSize); -void printAssertion(Assertion as); -RDF_Error addChildAfter (RDFT rdf, RDF_Resource parent, RDF_Resource child, RDF_Resource afterWhat); -RDF_Error addChildBefore (RDFT rdf, RDF_Resource parent, RDF_Resource child, RDF_Resource beforeWhat); -void nlclStoreKill(RDFT rdf, RDF_Resource r); -char* resourceID(RDF_Resource id); -PRBool containerp (RDF_Resource r); -void setContainerp (RDF_Resource r, PRBool contp); -PRBool lockedp (RDF_Resource r); -void setLockedp (RDF_Resource r, PRBool contp); -uint8 resourceType (RDF_Resource r); -void setResourceType (RDF_Resource r, uint8 type); -char* getBaseURL (const char* url) ; -void freeNamespaces (RDFFile f) ; -PRBool asEqual(RDFT r, Assertion as, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type); -Assertion makeNewAssertion (RDFT r, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv); - -RDFT MakeRemoteStore (char* url); -RDFT MakeMailAccountDB(char* url); -PRDir * OpenDir(char *name); -void PopGetNewMail (RDF_Resource r) ; -void readResourceFile(RDF rdf, RDF_Resource u); -void possiblyGCResource(RDF_Resource u); -PLHashNumber idenHash(const void* key); - -RDFT MakeBMKStore (char* url); -RDFT MakeLocalStore (char* url); -RDFT MakeFileDB (char* url); -RDFT MakeSCookDB (char* url); -char * makeRDFDBURL(char* directory, char* name); -void addToResourceList (RDFFile f, RDF_Resource u); -void removeFromAssertionList(RDFFile f, Assertion as); - - - - -/* string utilities */ - -int16 charSearch(const char c,const char* string); -int16 revCharSearch(const char c, const char* string); -PR_PUBLIC_API(PRBool) startsWith(const char* startPattern,const char* string); -PRBool endsWith(const char* endPattern,const char* string); -PRBool inverseTV(PRBool tv); -void createBootstrapResources(); -PRBool urlEquals(const char* url1,const char* url2); -char* append2Strings(const char* str1,const char* str2); -char* convertString2UTF8AndAppend(int16 charsetID, const char* str1,const char* str2); -PRBool substring(const char* pattern, const char* data); -void stringAppend(char* in, const char* append); - -RDFFile makeRDFFile (char* url, RDF_Resource top, PRBool localp); -void initRDFFile (RDFFile ans) ; -void parseNextRDFLine (RDFFile f, char* line) ; -void parseNextRDFBlob (RDFFile f, char* blob, int32 size); -void finishRDFParse (RDFFile f) ; -void abortRDFParse (RDFFile f); -void unitTransition (RDFFile f) ; -void assignHeaderSlot (RDFFile f, char* slot, char* value); -RDF_Error getFirstToken (char* line, char* nextToken, int16* l) ; -void addSlotValue (RDFFile f, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, char* op); -void assignSlot (RDF_Resource u, char* slot, char* value, RDFFile f); -RDF_Error parseSlotValue (RDFFile f, RDF_Resource s, char* value, void** parsed_value, RDF_ValueType* data_type) ; -RDF_Resource resolveReference (char *tok, RDFFile f) ; -RDF_Resource resolveGenlPosReference(char* tok, RDFFile f); -RDF_Resource resolveReference (char *tok, RDFFile f) ; -RDF_Resource resolveGenlPosReference(char* tok, RDFFile f); -void beginReadingRDFFile(RDFFile f); -void gcRDFFile (RDFFile f); -#ifdef XP_MAC -char* unescapeURL(char* inURL); -#endif -char* convertFileURLToNSPRCopaceticPath(char* inURL); -PRFileDesc* CallPROpenUsingFileURL(char *fileURL, PRIntn flags, PRIntn mode); -/* DB *CallDBOpenUsingFileURL(char *fileURL, int flags,int mode, DBTYPE type, const void *openinfo); */ - -char* copyString (const char* url); -PRBool nlocalStoreAssert (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) ; -char* MCDepFileURL (char* url) ; -void initLocalStore(RDFT rdf); -void freeAssertion(Assertion as); -Assertion localStoreAdd (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -Assertion localStoreRemove (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) ; - -Assertion remoteStoreAdd (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -Assertion remoteStoreRemove (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type) ; -void* remoteStoreGetSlotValue (RDFT mcf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -void ht_fprintf(PRFileDesc *file, const char *fmt, ...); - -RDF_Resource createContainer (char* id); -PRBool isContainer (RDF_Resource r) ; -PRBool isSeparator (RDF_Resource r) ; -PRBool isLeaf (RDF_Resource r) ; -PRBool bookmarkSlotp (RDF_Resource s) ; - -void basicAssertions (void) ; -char* makeResourceName (RDF_Resource node) ; -char* makeDBURL (char* name); - -/* int rdf_GetURL (MWContext *cx, int method, Net_GetUrlExitFunc *exit_routine, RDFFile rdfFile); */ - -RDFT MakePopDB (char* url) ; -PRBool nlocalStoreAssert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) ; -PRBool nlocalStoreUnassert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type) ; -PRBool nlocalStoreHasAssertion (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -void* nlocalStoreGetSlotValue (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -RDF_Cursor nlocalStoreGetSlotValues (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -void* nlocalStoreNextValue (RDFT mcf, RDF_Cursor c) ; -RDF_Error nlocalStoreDisposeCursor (RDFT mcf, RDF_Cursor c) ; -void createCoreVocab () ; - - -PRBool remoteAssert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) ; -PRBool remoteUnassert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type) ; -PRBool remoteAssert1 (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) ; -PRBool remoteAssert2 (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type, PRBool tv) ; -PRBool remoteUnassert1 (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, - RDF_ValueType type) ; -PRBool remoteStoreHasAssertion (RDFT rdf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -void* remoteStoreGetSlotValue (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -RDF_Cursor remoteStoreGetSlotValues (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -RDF_Cursor remoteStoreGetSlotValuesInt (RDFT rdf, RDF_Resource u, RDF_Resource s, RDF_ValueType type, PRBool inversep, PRBool tv) ; -RDF_Resource createSeparator(void); -PRBool -remoteAssert (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv); - -void* remoteStoreNextValue (RDFT mcf, RDF_Cursor c) ; -RDF_Error remoteStoreDisposeCursor (RDFT mcf, RDF_Cursor c) ; -PRBool remoteStoreHasAssertion (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -PRBool remoteStoreHasAssertionInt (RDFT mcf, RDF_Resource u, RDF_Resource s, void* v, RDF_ValueType type, PRBool tv) ; -PRBool nlocalStoreAddChildAt(RDFT mcf, RDF_Resource obj, RDF_Resource ref, RDF_Resource _new, - PRBool beforep); -RDFT getTranslator (char* url); - -RDFT MakeCookieStore (char* url); - -char* advertURLOfContainer (RDF r, RDF_Resource u) ; -RDFT RDFTNamed (RDF rdf, char* name) ; - -char* RDF_SerializeRDFStore (RDFT store) ; -char * unescapeURL(char *inURL); - - - - -extern RDF_WDVocab gWebData; -extern RDF_NCVocab gNavCenter; -extern RDF_CoreVocab gCoreVocab; - -NSPR_END_EXTERN_C - -#endif diff --git a/mozilla/rdf/src/rdfht.c b/mozilla/rdf/src/rdfht.c deleted file mode 100644 index d58998376d0..00000000000 --- a/mozilla/rdf/src/rdfht.c +++ /dev/null @@ -1,199 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file implements high level support for the rdf data model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#include "rdf-int.h" -#include "vocab.h" -#include "vocabint.h" -#include "bmk2rdf.h" -#include "core.h" - - -/* globals */ -char *profileDirURL = NULL; -char *gLocalStoreURL = NULL; -char *gBookmarkURL = NULL; -char *gGlobalHistoryURL = NULL; -void *timerID = NULL; -char *gRLForbiddenDomains = NULL; - -extern RDF gNCDB ; - - -static PRBool sRDFInitedB = PR_FALSE; -char* gNavCntrUrl; - - -char * gNavCenterDataSources[15] = -{"rdf:localStore", "rdf:remoteStore", "rdf:bookmarks", "rdf:remoteStore", "rdf:history", - /* "rdf:ldap", */ - "rdf:esftp", - "rdf:lfs", "rdf:CookieStore", - "rdf:columns", "rdf:find", - -#ifdef XP_MAC - "rdf:appletalk", -#endif - - NULL, NULL -}; - - - -RDF -newNavCenterDB() -{ - return RDF_GetDB((char**)gNavCenterDataSources); -} - - -void -walkThroughAllBookmarks (RDF_Resource u) -{ -#ifdef MOZILLA_CLIENT - RDF_Cursor c = RDF_GetSources(gNCDB, u, gCoreVocab->RDF_parent, RDF_RESOURCE_TYPE, true); - RDF_Resource next; - while ((next = RDF_NextValue(c)) != NULL) { - if (resourceType(next) == RDF_RT) walkThroughAllBookmarks(next); - } - RDF_DisposeCursor(c); -#endif -} - - -#ifndef XXX -PR_PUBLIC_API(RDF_Error) -RDF_Init() -{ - if ( sRDFInitedB ) - return -1; - - resourceHash = PL_NewHashTable(500, PL_HashString, PL_CompareStrings, - PL_CompareValues, NULL, NULL); - dataSourceHash = PL_NewHashTable(100, PL_HashString, PL_CompareStrings, - PL_CompareValues, NULL, NULL); - /* RDFglueInitialize(); */ - MakeRemoteStore("rdf:remoteStore"); - createVocabs(); - sRDFInitedB = PR_TRUE; - - /* XXX Bookmark hack */ - gBookmarkURL = copyString("file://G:/tmp/bookmarks.html"); - - return NS_OK; -} -#else /* XXX */ -PR_PUBLIC_API(RDF_Error) -RDF_Init(RDF_InitParams params) -{ -#ifdef MOZILLA_CLIENT - char* navCenterURL; -#endif - if ( sRDFInitedB ) - return -1; - -#ifdef MOZILLA_CLIENT - - /* - copy init params out before doing anything else (such as creating vocabulary) - to prevent any XP_GetString round-robin problems (ex: FE could be using XP_GetString - to pass in the init strings, which createVocabs() could affect - */ - profileDirURL = copyString(params->profileURL); - gBookmarkURL = copyString(params->bookmarksURL); - gGlobalHistoryURL = copyString(params->globalHistoryURL); -#endif - - resourceHash = PL_NewHashTable(500, PL_HashString, PL_CompareStrings, - PL_CompareValues, NULL, NULL); - dataSourceHash = PL_NewHashTable(100, PL_HashString, PL_CompareStrings, - PL_CompareValues, NULL, NULL); - /* RDFglueInitialize(); */ - MakeRemoteStore("rdf:remoteStore"); - createVocabs(); - sRDFInitedB = PR_TRUE; - -#ifdef MOZILLA_CLIENT - /* xxx - PREF_SetDefaultCharPref("browser.NavCenter", "http://rdf.netscape.com/rdf/navcntr.rdf"); - PREF_CopyCharPref("browser.NavCenter", &navCenterURL); - */ - navCenterURL = copyString("http://rdf.netscape.com/rdf/navcntr.rdf"); - if (!RDF_STRCHR(navCenterURL, ':')) { - navCenterURL = makeDBURL(navCenterURL); - } - gNavCntrUrl = copyString(navCenterURL); - *(gNavCenterDataSources + 1) = copyString(navCenterURL); - gNCDB = newNavCenterDB(); - freeMem(navCenterURL); - - HT_Startup(); - - /* GuessIEBookmarks(); */ - -#endif - walkThroughAllBookmarks(RDF_GetResource(NULL, "NC:Bookmarks", true)); - return 0; -} -#endif /* XXX */ - - - -/*need to keep a linked list of all the dbs opened so that they - can all be closed down on exit */ - - - -PR_PUBLIC_API(RDF_Error) -RDF_Shutdown () -{ -#ifdef MOZILLA_CLIENT - /* flushBookmarks(); */ -/* HT_Shutdown(); */ - /* RDFglueExit(); */ - if (profileDirURL != NULL) - { - freeMem(profileDirURL); - profileDirURL = NULL; - } - if (gBookmarkURL != NULL) - { - freeMem(gBookmarkURL); - gBookmarkURL = NULL; - } - if (gGlobalHistoryURL != NULL) - { - freeMem(gGlobalHistoryURL); - gGlobalHistoryURL = NULL; - } - if (gLocalStoreURL != NULL) - { - freeMem(gLocalStoreURL); - gLocalStoreURL = NULL; - } -#endif - disposeAllDBs(); - sRDFInitedB = PR_FALSE; - - return NS_OK; -} diff --git a/mozilla/rdf/src/rdfparse.c b/mozilla/rdf/src/rdfparse.c deleted file mode 100644 index 510168f537b..00000000000 --- a/mozilla/rdf/src/rdfparse.c +++ /dev/null @@ -1,573 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - This file implements parsing support for the rdf data model. - For more information on this file, contact rjc or guha - For more information on RDF, look at the RDF section of www.mozilla.org -*/ - -#include "rdfparse.h" -#include "core.h" - - -#define wsCharp(c) ((c == '\r') || (c == '\t') || (c == ' ') || (c == '\n')) - - - -char -decodeEntityRef (char* string, int32* stringIndexPtr, int32 len) -{ - if (startsWith("lt;", string)) { - *stringIndexPtr = *stringIndexPtr + 3; - return '<'; - } else if (startsWith("gt;", string)) { - *stringIndexPtr = *stringIndexPtr + 3; - return '>'; - } else if (startsWith("amp;", string)) { - *stringIndexPtr = *stringIndexPtr + 4; - return '&'; - } else return -1; -} - - - -char * -copyStringIgnoreWhiteSpace(char* string) -{ - int32 len = RDF_STRLEN(string); - char* buf = (char*)getMem(len + 1); - PRBool inWhiteSpace = 1; - int32 buffIndex = 0; - int32 stringIndex = 0; - - while (stringIndex < len) { - char nextChar = *(string + stringIndex); - PRBool wsp = wsCharp(nextChar); - if (!wsp) { - if (nextChar == '&') { - *(buf + buffIndex++) = decodeEntityRef(&string[stringIndex+1], - &stringIndex, len-stringIndex); - } else { - *(buf + buffIndex++) = nextChar; - } - inWhiteSpace = 0; - } else if (!inWhiteSpace) { - *(buf + buffIndex++) = ' '; - inWhiteSpace = 1; - } else { - inWhiteSpace = 1; - } - stringIndex++; - } - - return buf; -} - - - -char * -getHref(char** attlist) -{ - char* ans = getAttributeValue(attlist, "rdf:href"); - if (!ans) ans = getAttributeValue(attlist, "RDF:href"); - if (!ans) ans = getAttributeValue(attlist, "href"); - return ans; -} - - -int parseNextRDFXMLBlobInt(RDFFile f, char* blob, int32 size) { - int32 n, last, m; - PRBool somethingseenp = 0; - n = last = 0; - - while (n < size) { - char c = blob[n]; - m = 0; - somethingseenp = 0; - memset(f->line, '\0', RDF_BUF_SIZE-1); - if (f->holdOver[0] != '\0') { - memcpy(f->line, f->holdOver, RDF_STRLEN(f->holdOver)); - m = RDF_STRLEN(f->holdOver); - somethingseenp = 1; - memset(f->holdOver, '\0', RDF_BUF_SIZE-1); - } - while ((n < size) && (wsc(c))) {c = blob[++n];} - /* f->line[m++] = c; - c = blob[++n]; */ - while ((m < RDF_BUF_SIZE) && (c != '<') && (c != '>')) { - f->line[m] = c; - m++; - somethingseenp = (somethingseenp || (!(wsc(c)))); - n++; - if (n < size) c = blob[n]; - else break; - } - if (c == '>') f->line[m] = c; - n++; - if (m > 0) { - if ((c == '<') || (c == '>')) { - last = n; - if (c == '<') f->holdOver[0] = '<'; - if (somethingseenp == 1) parseNextRDFToken(f, f->line); - } else if (size > last) { - memcpy(f->holdOver, f->line, m); - } - } else if (c == '<') f->holdOver[0] = '<'; - } - return(size); -} - - -void -parseRDFProcessingInstruction (RDFFile f, char* token) -{ - char* attlist[2*MAX_ATTRIBUTES+1]; - char* elementName; - tokenizeElement(token, attlist, &elementName); - if (RDF_STRCMP(elementName, "?xml:namespace") == 0) { - char* as = getAttributeValue(attlist, "prefix"); - char* url = getAttributeValue(attlist, "ns"); - if ((as != NULL) && (url != NULL)) { - XMLNameSpace ns = (XMLNameSpace)getMem(sizeof(struct XMLNameSpaceStruct)); - size_t urln = RDF_STRLEN(url); - PRBool addSlash = (url[urln-1] != '/'); - if(addSlash) urln++; - ns->url = (char*)getMem(sizeof(char) * (urln + 1)); - sprintf(ns->url, "%s%s", url, addSlash ? "/" : ""); - ns->as = copyString(as); - ns->next = f->namespaces; - f->namespaces = ns; - } - } -} - - - -void -freeNamespaces (RDFFile f) -{ - XMLNameSpace ns1 = f->namespaces; - while (ns1) { - XMLNameSpace next = ns1->next; - freeMem(ns1->as); - freeMem(ns1->url); - freeMem(ns1); - ns1 = next; - } - f->namespaces = NULL; -} - - - -char * -getAttributeValue (char** attlist, char* elName) -{ - size_t n = 0; - if (!attlist) return NULL; - while ((n < 2*MAX_ATTRIBUTES) && (*(attlist + n) != NULL)) { - if (RDF_STRCMP(*(attlist + n), elName) == 0) return *(attlist + n + 1); - n = n + 2; - } - return NULL; -} - - - -PRBool -tagEquals (RDFFile f, char* tag1, char* tag2) -{ - return (RDF_STRCMP(tag1, tag2) == 0); -} - - - -void -addElementProps (char** attlist, char* elementName, RDFFile f, RDF_Resource obj) -{ - uint32 count = 0; - while (count < 2*MAX_ATTRIBUTES) { - char* attName = attlist[count++]; - char* attValue = attlist[count++]; - if ((attName == NULL) || (attValue == NULL)) break; - if (!tagEquals(f, attName, "href") && !tagEquals(f, attName, "rdf:href") && - !tagEquals(f, attName, "RDF:href") && !tagEquals(f, attName, "tv") - && !tagEquals(f, attName, "id")) { - addSlotValue(f, obj, ResourceFromElementName(f, attName), copyStringIgnoreWhiteSpace(attValue), - RDF_STRING_TYPE, "true"); - } - } -} - - - -PRBool -knownObjectElement (char* eln) -{ - return (RDF_STRCMP(eln, "RDF:Description") == 0); -} - -/* XXX -void -rdf_abort(NET_StreamClass *stream, int status) -{ - RDFFile f = (RDFFile)stream->data_object; - if (RDF_STRCMP(f->url, gNavCntrUrl) == 0) { - parseNextRDFXMLBlob(stream, gDefaultNavcntr, RDF_STRLEN(gDefaultNavcntr)); - } - - if (f) { - f->locked = false; - gcRDFFile (f); - freeMem(f->line); - freeMem(f->currentSlot); - freeMem(f->holdOver); - freeNamespaces(f) ; - } -} -*/ - - -char * -possiblyMakeAbsolute (RDFFile f, char* url) -{ - if (RDF_STRCHR(url, ':') != NULL) { - return copyString(url); - } else { - char* ans = getMem(RDF_STRLEN(f->url) + strlen(url)+2); - sprintf(ans, "%s#%s", f->url, url); - return ans; - } -} - - - -PRBool -containerTagp (RDFFile f, char* elementName) -{ - return (tagEquals(f, elementName, "Container") || - tagEquals(f, elementName, "Topic") || - (tagEquals(f, elementName, "RelatedLinks"))); -} - -#define DC_TITLE "http://purl.org/metadata/dublin_core/title" -#define SM_CHILD "http://purl.org/metadata/sitemap/child" - -RDF_Resource -ResourceFromElementName (RDFFile f, char* elementName) -{ - if(!elementName || (RDF_STRCHR(elementName, ':') == NULL) ) { - return RDF_GetResource(NULL, elementName, 1); - } else { - XMLNameSpace ns = f->namespaces; - while (ns) { - if (startsWith(ns->as, elementName)) { - RDF_Resource ans; - size_t asn = RDF_STRLEN(ns->as); - size_t urln = RDF_STRLEN(ns->url); - char* url = getMem(RDF_STRLEN(ns->url) + strlen(elementName)-asn); - memcpy(url, ns->url, urln); - RDF_STRCAT(url, &elementName[asn+1]); - if (RDF_STRCMP(url, DC_TITLE) == 0) { - ans = gCoreVocab->RDF_name; - } else if (RDF_STRCMP(url, SM_CHILD) == 0) { - ans = gCoreVocab->RDF_child; - } else - ans = RDF_GetResource(NULL, url, 1); - freeMem(url); - return ans; - } - ns = ns->next; - } - return RDF_GetResource(NULL, elementName, 1); - } -} - - - -void -parseNextRDFToken (RDFFile f, char* token) -{ - char* attlist[2*MAX_ATTRIBUTES+1]; - char* elementName; - if (token[0] != '<') { - if ((f->status == EXPECTING_OBJECT) && (f->depth > 1)) { - RDF_Resource u = f->stack[f->depth-2]; - RDF_Resource s = f->stack[f->depth-1]; - addSlotValue(f, u, s, copyStringIgnoreWhiteSpace(token), RDF_STRING_TYPE, NULL); - } - } else if (startsWith("