CStdString OfflineDocIDResolver::ResolveToOnlineDocID(const CStdString &sOfflineDocID, const CStdString &sCurrentUserName) const { CStdString sOfflineDocNum = GetDocNum( sOfflineDocID ); CStdString sVersion = GetVersion( sOfflineDocID ); CStdString sOfflineLibrary = sCurrentUserName; CStdString sOnlineLibrary = GetOnlineLibrary( sOfflineDocID, sOfflineLibrary ); CStdString sKey = GetAttacheLocation() + _T("\\") + sOnlineLibrary + _T("\\") + sOfflineLibrary + _T("\\") + sOfflineDocNum; DWORD dwOnlineDocNumber = GetDWORDValue(sKey, _T("DocNumber")); if(dwOnlineDocNumber == -1) { CStdString sErr = _T("Could not ResolveToOnlineDocID : ") + sOfflineDocID + _T("for user : "******"%d"), dwOnlineDocNumber ); CStdString sNewDocID(_T("powerdocs://")); sNewDocID += sOnlineLibrary; sNewDocID += _T("/") + sOnlineDocNumber; sNewDocID += _T("/") + sVersion; OfflineDataStore ods; if(!ods.IsDocOffline(sNewDocID)) return _T("offline://") + sOfflineDocID; return _T("offline://") + sNewDocID; }
CStdString OfflineDocIDResolver::ResolveToOfflineDocID(const CStdString &sDocID) const { CStdString sDocNum = GetDocNum( sDocID ); CStdString sVersion = GetVersion( sDocID ); CStdString sLibrary = GetLibrary( sDocID ); CStdString sOfflineDocNum; CStdString sOfflineLibrary; if(!GetOfflineDocumentInfo(GetLibraryToSearch(sDocID), sDocNum, sOfflineDocNum, sOfflineLibrary)) return sDocID; CStdString sNewDocID(_T("powerdocs://")); sNewDocID += sLibrary; sNewDocID += _T("_"); sNewDocID += sOfflineLibrary; sNewDocID += _T("/") + sOfflineDocNum; sNewDocID += _T("/") + sVersion; return sNewDocID; }
int mg_get_doc_num(void *qd) { return GetDocNum((query_data *)qd) ; }
static int ProcessDocs (query_data * qd, int num, int verbatim, char OutputType, FILE * Output) { int max_buf = 0; int DocCount = 0; char *doc_sepstr = NULL; char *para_sepstr = NULL; char *para_start = NULL; int heads_length = atoi (GetDefEnv ("heads_length", "50")); char QueryType = get_query_type (); int need_text = (OutputType == OUTPUT_TEXT || OutputType == OUTPUT_HILITE || OutputType == OUTPUT_HEADERS || OutputType == OUTPUT_SILENT); if (OutputType == OUTPUT_TEXT || OutputType == OUTPUT_HILITE) { if (QueryType == QUERY_APPROX || QueryType == QUERY_RANKED) { doc_sepstr = de_escape_string ( Xstrdup (GetDefEnv ("ranked_doc_sepstr", "---------------------------------- %n %w\\n"))); } else { doc_sepstr = de_escape_string ( Xstrdup (GetDefEnv ("doc_sepstr", "---------------------------------- %n\\n"))); } para_sepstr = de_escape_string ( Xstrdup (GetDefEnv ("para_sepstr", "\\n######## PARAGRAPH %n ########\\n"))); para_start = de_escape_string ( Xstrdup (GetDefEnv ("para_start", "***** Weight = %w *****\\n"))); } if (need_text) { max_buf = atoi (GetDefEnv ("buffer", "1048576")); } do { u_char *UDoc = NULL; unsigned long ULen; if (need_text) { /* load the compressed text */ if (LoadCompressedText (qd, max_buf)) { Message ("Unable to load compressed text."); FatalError (1, "This is probably due to lack of memory."); } /* uncompress the loaded text */ UDoc = GetDocText (qd, &ULen); if (UDoc == NULL) FatalError (1, "UDoc is unexpectedly NULL"); } if (!UDoc || PostProc ((char *) UDoc, verbatim)) { switch (OutputType) { case OUTPUT_COUNT: case OUTPUT_SILENT: break; case OUTPUT_DOCNUMS: /* This prints out the docnums string */ if (PagerRunning) fprintf (Output, "%8d %6.4f %7lu\n", GetDocNum (qd), GetDocWeight (qd), GetDocCompLength (qd)); break; case OUTPUT_HEADERS: /* This prints out the headers of the documents */ if (PagerRunning) fprintf (Output, "%d ", GetDocNum (qd)); HeaderOut (Output, UDoc, ULen, heads_length); if (PagerRunning) fputc ('\n', Output); break; #if TREC_MODE case OUTPUT_EXTRAS: /* This prints out the docnums string */ if (PagerRunning && trec_ids) { long DN, PN = GetDocNum (qd) - 1; if (trec_paras) DN = trec_paras[PN]; else DN = PN; fprintf (Output, "%-14.14s %8ld %10.5f\n", &trec_ids[DN * 14], PN + 1, GetDocWeight (qd)); } break; #endif case OUTPUT_TEXT: case OUTPUT_HILITE: { int j, para = -1, curr_para = 0; int init_para = -1; DocEntry *de, *doc_chain = NULL; int p_on = 0; register char ch = ' '; register char lch = '\n'; if (PagerRunning) { StringOut (Output, doc_sepstr, 1, GetDocNum (qd), QueryType == 'A' || QueryType == 'R', GetDocWeight (qd)); } if (qd->id->ifh.InvfLevel == 3) { init_para = FetchInitialParagraph (qd->td, GetDocNum (qd)); doc_chain = GetDocChain (qd); para = GetDocNum (qd) - init_para; StringOut (Output, para_sepstr, 1, curr_para + 1, 0, 0); if ((de = in_chain (0, init_para, doc_chain))) StringOut (Output, para_start, 0, 0, 1, de->Weight); if (doc_chain->DocNum - init_para == 0) p_on = 1; } for (j = 0; j < ULen; j++) { ch = UDoc[j]; switch (ch) { case '\02': break; case '\01': ch = '\n'; case '\03': p_on = 0; curr_para++; StringOut (Output, para_sepstr, 1, curr_para + 1, 0, 0); lch = *(strchr (para_sepstr, '\0') - 1); if ((de = in_chain (curr_para, init_para, doc_chain))) StringOut (Output, para_start, 0, 0, 1, de->Weight); if (doc_chain && doc_chain->DocNum - init_para == curr_para) p_on = 1; break; default: { if (PagerRunning) { fputc (ch, Output); if (p_on && isprint (ch)) { fputc ('\b', Output); fputc ('_', Output); } } lch = ch; } } } if (PagerRunning && lch != '\n') fputc ('\n', Output); p_on = 0; } } if (PagerRunning) fflush (Output); } DocCount++; } while (NextDoc (qd) && PagerRunning && (!Ctrl_C)); if (need_text) { FreeTextBuffer (qd); } if (OutputType == OUTPUT_TEXT || OutputType == OUTPUT_HILITE) { Xfree (doc_sepstr); Xfree (para_sepstr); Xfree (para_start); } return (DocCount); }