NS_IMETHODIMP nsMsgAccountManagerDataSource::HasArcOut(nsIRDFResource *source, nsIRDFResource *aArc, PRBool *result) { nsresult rv = NS_OK; if (aArc == kNC_Settings) { // based on createSettingsResources() // we only have settings for local folders and servers with identities nsCOMPtr<nsIMsgIncomingServer> server; rv = getServerForFolderNode(source, getter_AddRefs(server)); if (server) { // Check the offline capability before adding arc PRInt32 offlineSupportLevel = 0; (void) server->GetOfflineSupportLevel(&offlineSupportLevel); if (offlineSupportLevel >= OFFLINE_SUPPORT_LEVEL_REGULAR) { *result = PR_TRUE; return NS_OK; } PRBool supportsDiskSpace; (void) server->GetSupportsDiskSpace(&supportsDiskSpace); if (supportsDiskSpace) { *result = PR_TRUE; return NS_OK; } return serverHasIdentities(server, result); } } *result = PR_FALSE; return NS_OK; }
// end of all #Settings arcs nsresult nsMsgAccountManagerDataSource::createSettingsResources(nsIRDFResource *aSource, nsISupportsArray *aNodeArray) { // If this isn't a server, just return. if (aSource == kNC_PageTitleSMTP) return NS_OK; nsCOMPtr<nsIMsgIncomingServer> server; nsresult rv = getServerForFolderNode(aSource, getter_AddRefs(server)); NS_ENSURE_SUCCESS(rv, rv); if (server) { PRBool hasIdentities; rv = serverHasIdentities(server, &hasIdentities); if (hasIdentities) { aNodeArray->AppendElement(kNC_PageTitleServer); aNodeArray->AppendElement(kNC_PageTitleCopies); aNodeArray->AppendElement(kNC_PageTitleAddressing); } // Junk settings apply for all server types except for news and rss. nsCString serverType; server->GetType(serverType); if (!serverType.LowerCaseEqualsLiteral("nntp") && !serverType.LowerCaseEqualsLiteral("rss")) aNodeArray->AppendElement(kNC_PageTitleJunk); // Check the offline capability before adding // offline item PRInt32 offlineSupportLevel = 0; rv = server->GetOfflineSupportLevel(&offlineSupportLevel); NS_ENSURE_SUCCESS(rv,rv); PRBool supportsDiskSpace; rv = server->GetSupportsDiskSpace(&supportsDiskSpace); NS_ENSURE_SUCCESS(rv,rv); // currently there is no offline without diskspace if (offlineSupportLevel >= OFFLINE_SUPPORT_LEVEL_REGULAR) aNodeArray->AppendElement(kNC_PageTitleOfflineAndDiskSpace); else if (supportsDiskSpace) aNodeArray->AppendElement(kNC_PageTitleDiskSpace); if (hasIdentities) { // extensions come after the default panels rv = appendGenericSettingsResources(server, aNodeArray); NS_ASSERTION(NS_SUCCEEDED(rv), "failed to add generic panels"); } } return NS_OK; }