Bug 329854 r=joe.hughes Add a excludeReadOnlyFolders to query options for

use when filing.
This commit is contained in:
brettw%gmail.com 2006-03-10 19:44:28 +00:00
parent 59a75b9f67
commit 42c99db36e
5 changed files with 50 additions and 1 deletions

View File

@ -831,6 +831,16 @@ interface nsINavHistoryQueryOptions : nsISupports
*/ */
attribute boolean excludeQueries; attribute boolean excludeQueries;
/**
* Set to true to exclude read-only folders from the query results. This is
* designed for cases where you want to give the user the option of filing
* something into a list of folders. It only affects cases where the actual
* folder result node would appear in its parent folder and filters it out.
* It doesn't affect the query at all, and doesn't affect more complex
* queries (such as "folders with annotation X").
*/
attribute boolean excludeReadOnlyFolders;
/** /**
* When set, allows items with "place:" URIs to appear as containers, * When set, allows items with "place:" URIs to appear as containers,
* with the container's contents filled in from the stored query. * with the container's contents filled in from the stored query.

View File

@ -1644,6 +1644,15 @@ nsNavBookmarks::QueryFolderChildren(PRInt64 aFolderId,
nsCOMPtr<nsNavHistoryResultNode> node; nsCOMPtr<nsNavHistoryResultNode> node;
if (isFolder) { if (isFolder) {
PRInt64 folder = mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild); PRInt64 folder = mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild);
if (options->ExcludeReadOnlyFolders()) {
// see if it's read only and skip it
PRBool readOnly = PR_FALSE;
GetFolderReadonly(folder, &readOnly);
if (readOnly)
continue; // skip
}
rv = ResultNodeForFolder(folder, aOptions, getter_AddRefs(node)); rv = ResultNodeForFolder(folder, aOptions, getter_AddRefs(node));
if (NS_FAILED(rv)) if (NS_FAILED(rv))
continue; continue;

View File

@ -152,6 +152,7 @@ static void SetOptionsKeyUint32(const nsCString& aValue,
#define QUERYKEY_RESULT_TYPE "type" #define QUERYKEY_RESULT_TYPE "type"
#define QUERYKEY_EXCLUDE_ITEMS "excludeItems" #define QUERYKEY_EXCLUDE_ITEMS "excludeItems"
#define QUERYKEY_EXCLUDE_QUERIES "excludeQueries" #define QUERYKEY_EXCLUDE_QUERIES "excludeQueries"
#define QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS "excludeReadOnlyFolders"
#define QUERYKEY_EXPAND_QUERIES "expandQueries" #define QUERYKEY_EXPAND_QUERIES "expandQueries"
#define QUERYKEY_FORCE_ORIGINAL_TITLE "originalTitle" #define QUERYKEY_FORCE_ORIGINAL_TITLE "originalTitle"
#define QUERYKEY_INCLUDE_HIDDEN "includeHidden" #define QUERYKEY_INCLUDE_HIDDEN "includeHidden"
@ -416,6 +417,12 @@ nsNavHistory::QueriesToQueryString(nsINavHistoryQuery **aQueries,
aQueryString += NS_LITERAL_CSTRING(QUERYKEY_EXCLUDE_QUERIES "=1"); aQueryString += NS_LITERAL_CSTRING(QUERYKEY_EXCLUDE_QUERIES "=1");
} }
// exclude read only folders
if (options->ExcludeReadOnlyFolders()) {
AppendAmpersandIfNonempty(aQueryString);
aQueryString += NS_LITERAL_CSTRING(QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS "=1");
}
// expand queries // expand queries
if (options->ExpandQueries()) { if (options->ExpandQueries()) {
AppendAmpersandIfNonempty(aQueryString); AppendAmpersandIfNonempty(aQueryString);
@ -627,6 +634,11 @@ nsNavHistory::TokensToQueries(const nsTArray<QueryKeyValuePair>& aTokens,
SetOptionsKeyBool(kvp.value, aOptions, SetOptionsKeyBool(kvp.value, aOptions,
&nsINavHistoryQueryOptions::SetExcludeQueries); &nsINavHistoryQueryOptions::SetExcludeQueries);
// exclude read only folders
} else if (kvp.key.EqualsLiteral(QUERYKEY_EXCLUDE_READ_ONLY_FOLDERS)) {
SetOptionsKeyBool(kvp.value, aOptions,
&nsINavHistoryQueryOptions::SetExcludeReadOnlyFolders);
// expand queries // expand queries
} else if (kvp.key.EqualsLiteral(QUERYKEY_EXPAND_QUERIES)) { } else if (kvp.key.EqualsLiteral(QUERYKEY_EXPAND_QUERIES)) {
SetOptionsKeyBool(kvp.value, aOptions, SetOptionsKeyBool(kvp.value, aOptions,
@ -1058,6 +1070,20 @@ nsNavHistoryQueryOptions::SetExcludeQueries(PRBool aExclude)
return NS_OK; return NS_OK;
} }
// excludeReadOnlyFolders
NS_IMETHODIMP
nsNavHistoryQueryOptions::GetExcludeReadOnlyFolders(PRBool* aExclude)
{
*aExclude = mExcludeReadOnlyFolders;
return NS_OK;
}
NS_IMETHODIMP
nsNavHistoryQueryOptions::SetExcludeReadOnlyFolders(PRBool aExclude)
{
mExcludeReadOnlyFolders = aExclude;
return NS_OK;
}
// expandQueries // expandQueries
NS_IMETHODIMP NS_IMETHODIMP
nsNavHistoryQueryOptions::GetExpandQueries(PRBool* aExpand) nsNavHistoryQueryOptions::GetExpandQueries(PRBool* aExpand)

View File

@ -117,6 +117,7 @@ public:
mGroupCount(0), mGroupings(nsnull), mGroupCount(0), mGroupings(nsnull),
mExcludeItems(PR_FALSE), mExcludeItems(PR_FALSE),
mExcludeQueries(PR_FALSE), mExcludeQueries(PR_FALSE),
mExcludeReadOnlyFolders(PR_FALSE),
mExpandQueries(PR_FALSE), mExpandQueries(PR_FALSE),
mForceOriginalTitle(PR_FALSE), mForceOriginalTitle(PR_FALSE),
mIncludeHidden(PR_FALSE), mIncludeHidden(PR_FALSE),
@ -139,6 +140,7 @@ public:
} }
PRBool ExcludeItems() const { return mExcludeItems; } PRBool ExcludeItems() const { return mExcludeItems; }
PRBool ExcludeQueries() const { return mExcludeQueries; } PRBool ExcludeQueries() const { return mExcludeQueries; }
PRBool ExcludeReadOnlyFolders() const { return mExcludeReadOnlyFolders; }
PRBool ExpandQueries() const { return mExpandQueries; } PRBool ExpandQueries() const { return mExpandQueries; }
PRBool ForceOriginalTitle() const { return mForceOriginalTitle; } PRBool ForceOriginalTitle() const { return mForceOriginalTitle; }
PRBool IncludeHidden() const { return mIncludeHidden; } PRBool IncludeHidden() const { return mIncludeHidden; }
@ -163,6 +165,7 @@ private:
PRUint32 *mGroupings; PRUint32 *mGroupings;
PRBool mExcludeItems; PRBool mExcludeItems;
PRBool mExcludeQueries; PRBool mExcludeQueries;
PRBool mExcludeReadOnlyFolders;
PRBool mExpandQueries; PRBool mExpandQueries;
PRBool mForceOriginalTitle; PRBool mForceOriginalTitle;
PRBool mIncludeHidden; PRBool mIncludeHidden;

View File

@ -2637,7 +2637,8 @@ nsNavHistoryFolderResultNode::StartIncrementalUpdate()
{ {
// if any items are excluded, we can not do incremental updates since the // if any items are excluded, we can not do incremental updates since the
// indices from the bookmark service will not be valid // indices from the bookmark service will not be valid
if (! mOptions->ExcludeItems() && ! mOptions->ExcludeQueries()) { if (! mOptions->ExcludeItems() && ! mOptions->ExcludeQueries() &&
! mOptions->ExcludeReadOnlyFolders()) {
// easy case: we are visible, always do incremental update // easy case: we are visible, always do incremental update
if (mExpanded || AreChildrenVisible()) if (mExpanded || AreChildrenVisible())