summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp')
-rw-r--r--comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp b/comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp
new file mode 100644
index 0000000000..795cd514f4
--- /dev/null
+++ b/comm/mail/components/migration/src/nsMailProfileMigratorUtils.cpp
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsMailProfileMigratorUtils.h"
+#include "nsIFile.h"
+#include "nsIProperties.h"
+#include "nsIProfileMigrator.h"
+
+#include "nsServiceManagerUtils.h"
+#include "nsAppDirectoryServiceDefs.h"
+#include "nsXPCOMCID.h"
+
+void SetProxyPref(const nsACString& aHostPort, const char* aPref,
+ const char* aPortPref, nsIPrefBranch* aPrefs) {
+ nsAutoCString hostPort(aHostPort);
+ int32_t portDelimOffset = hostPort.RFindChar(':');
+ if (portDelimOffset > 0) {
+ nsAutoCString host(Substring(hostPort, 0, portDelimOffset));
+ nsAutoCString port(Substring(hostPort, portDelimOffset + 1,
+ hostPort.Length() - (portDelimOffset + 1)));
+
+ aPrefs->SetCharPref(aPref, host);
+ nsresult stringErr;
+ int32_t portValue = port.ToInteger(&stringErr);
+ aPrefs->SetIntPref(aPortPref, portValue);
+ } else
+ aPrefs->SetCharPref(aPref, hostPort);
+}
+
+void ParseOverrideServers(const char* aServers, nsIPrefBranch* aBranch) {
+ // Windows (and Opera) formats its proxy override list in the form:
+ // server;server;server where server is a server name or ip address,
+ // or "<local>". Mozilla's format is server,server,server, and <local>
+ // must be translated to "localhost,127.0.0.1"
+ nsAutoCString override(aServers);
+ int32_t left = 0, right = 0;
+ for (;;) {
+ right = override.FindChar(';', right);
+ const nsACString& host = Substring(
+ override, left, (right < 0 ? override.Length() : right) - left);
+ if (host.Equals("<local>"))
+ override.Replace(left, 7, "localhost,127.0.0.1"_ns);
+ if (right < 0) break;
+ left = right + 1;
+ override.Replace(right, 1, ","_ns);
+ }
+ aBranch->SetCharPref("network.proxy.no_proxies_on", override);
+}
+
+void GetMigrateDataFromArray(MigrationData* aDataArray,
+ int32_t aDataArrayLength, bool aReplace,
+ nsIFile* aSourceProfile, uint16_t* aResult) {
+ nsCOMPtr<nsIFile> sourceFile;
+ bool exists;
+ MigrationData* cursor;
+ MigrationData* end = aDataArray + aDataArrayLength;
+ for (cursor = aDataArray; cursor < end && cursor->fileName; ++cursor) {
+ // When in replace mode, all items can be imported.
+ // When in non-replace mode, only items that do not require file replacement
+ // can be imported.
+ if (aReplace || !cursor->replaceOnly) {
+ aSourceProfile->Clone(getter_AddRefs(sourceFile));
+ sourceFile->Append(nsDependentString(cursor->fileName));
+ sourceFile->Exists(&exists);
+ if (exists) *aResult |= cursor->sourceFlag;
+ }
+ free(cursor->fileName);
+ cursor->fileName = nullptr;
+ }
+}
+
+void GetProfilePath(nsIProfileStartup* aStartup,
+ nsCOMPtr<nsIFile>& aProfileDir) {
+ if (aStartup) {
+ aStartup->GetDirectory(getter_AddRefs(aProfileDir));
+ } else {
+ nsCOMPtr<nsIProperties> dirSvc(
+ do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID));
+ if (dirSvc) {
+ dirSvc->Get(NS_APP_USER_PROFILE_50_DIR, NS_GET_IID(nsIFile),
+ getter_AddRefs(aProfileDir));
+ }
+ }
+}