nsresult nsAddbookProtocolHandler::GeneratePrintOutput(nsIAddbookUrl *addbookUrl, nsString &aOutput) { NS_ENSURE_ARG_POINTER(addbookUrl); nsCAutoString uri; nsresult rv = addbookUrl->GetPath(uri); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr<nsIRDFService> rdfService = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv); NS_ENSURE_SUCCESS(rv,rv); /* turn "//moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory://abook.mab" */ /* step 1: turn "//moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory/abook.mab?action=print" */ if (uri[0] != '/' && uri[1] != '/') return NS_ERROR_UNEXPECTED; uri.Cut(0,2); /* step 2: turn "moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory/abook.mab" */ PRInt32 pos = uri.Find("?action=print"); if (pos == -1) return NS_ERROR_UNEXPECTED; uri.SetLength(pos); /* step 2: turn "moz-abmdbdirectory/abook.mab" into "moz-abmdbdirectory://abook.mab" */ pos = uri.Find("/"); if (pos == -1) return NS_ERROR_UNEXPECTED; uri.Insert('/', pos); uri.Insert(':', pos); nsCOMPtr <nsIRDFResource> resource; rv = rdfService->GetResource(uri, getter_AddRefs(resource)); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr <nsIAbDirectory> directory = do_QueryInterface(resource, &rv); NS_ENSURE_SUCCESS(rv,rv); rv = BuildDirectoryXML(directory, aOutput); NS_ENSURE_SUCCESS(rv,rv); return NS_OK; }
nsresult nsAddbookProtocolHandler::GeneratePrintOutput(nsIAddbookUrl *addbookUrl, nsString &aOutput) { NS_ENSURE_ARG_POINTER(addbookUrl); nsAutoCString uri; nsresult rv = addbookUrl->GetPath(uri); NS_ENSURE_SUCCESS(rv,rv); /* turn "//moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory://abook.mab" */ /* step 1: turn "//moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory/abook.mab?action=print" */ if (uri[0] != '/' && uri[1] != '/') return NS_ERROR_UNEXPECTED; uri.Cut(0,2); /* step 2: turn "moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory/abook.mab" */ int32_t pos = uri.Find("?action=print"); if (pos == -1) return NS_ERROR_UNEXPECTED; uri.SetLength(pos); /* step 2: turn "moz-abmdbdirectory/abook.mab" into "moz-abmdbdirectory://abook.mab" */ pos = uri.FindChar('/'); if (pos == -1) return NS_ERROR_UNEXPECTED; uri.Insert('/', pos); uri.Insert(':', pos); nsCOMPtr<nsIAbManager> abManager(do_GetService(NS_ABMANAGER_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIAbDirectory> directory; rv = abManager->GetDirectory(uri, getter_AddRefs(directory)); NS_ENSURE_SUCCESS(rv, rv); rv = BuildDirectoryXML(directory, aOutput); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }