Commit e36785b3 authored by Tomas Touceda's avatar Tomas Touceda
Browse files

Add {Default,}{Plugin,Profile}Directory settings

If defined relative, make Vidalia's binary path the start point.
parent 335065fb
Loading
Loading
Loading
Loading
+37 −17
Original line number Diff line number Diff line
@@ -624,31 +624,43 @@ MainWindow::launchBrowserFromDirectory()
{
  VidaliaSettings settings;

  /** Directory for the browser */
  QString browserDirectory = settings.getBrowserDirectory();
  QString browserDirectoryFilename = settings.getBrowserExecutable();
  if(QDir(browserDirectory).isRelative())
    browserDirectory = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()
                                                + "/" + browserDirectory);

  _browserProcess->setEnvironment(updateBrowserEnv());
  /** Relative path to the browser executable from the browserDirectory */
  QString browserExecutable = QDir::toNativeSeparators(browserDirectory + "/" + settings.getBrowserExecutable());

  /* The browser is in <browserDirectory>/App/Firefox/<browserDirectoryFilename> */
  QString browserExecutable =
    QDir::toNativeSeparators(browserDirectory + "/App/Firefox/" + browserDirectoryFilename);
  /* The profile is in <browserDirectory>/Data/profile */
  QString profileDir =
    QDir::toNativeSeparators(browserDirectory + "/Data/profile");
  /** Relative path to profile from the browserDirectory */
  QString profileDirectory = QDir::toNativeSeparators(settings.getProfileDirectory());
  /** Default profile to copy from */
  QString defaultProfileDirectory = QDir::toNativeSeparators(settings.getDefaultProfileDirectory());

  /** Relative path to the plugins directory from the browserDirectory */
  QString pluginsDirectory = QDir::toNativeSeparators(settings.getPluginsDirectory());
  /** Relative path to the default plugins directory from the browserDirectory */
  QString defaultPluginsDirectory = QDir::toNativeSeparators(settings.getDefaultPluginsDirectory());

  QString profileDir = browserDirectory + "/" + profileDirectory;

  _browserProcess->setEnvironment(updateBrowserEnv());

  /* Copy the profile directory if it's not already there */
  QDir browserDirObj = QDir(browserDirectory);

  /* Copy the profile directory if it's not already there */
  if (!browserDirObj.exists("Data/profile")) {
    browserDirObj.mkdir("Data/profile");
    copy_dir(browserDirectory + "/App/DefaultData/profile", browserDirectory + "/Data/profile");
  if (!browserDirObj.exists(profileDirectory)) {
    browserDirObj.mkdir(profileDirectory);
    copy_dir(browserDirectory + "/" + defaultProfileDirectory,
             browserDirectory + "/" + profileDirectory);
  }

  /* Copy the plugins directory if it's not already there */
  if (!browserDirObj.exists("Data/plugins")) {
    browserDirObj.mkdir("Data/plugins");
    copy_dir(browserDirectory + "/App/DefaultData/plugins", browserDirectory + "/Data/plugins");
  /* Copy the pluginss directory if it's not already there */
  if (!browserDirObj.exists(pluginsDirectory)) {
    browserDirObj.mkdir(pluginsDirectory);
    copy_dir(browserDirectory + "/" + defaultPluginsDirectory,
             browserDirectory + "/" + pluginsDirectory);
  }

  /* Build the command line arguments */
@@ -1054,6 +1066,8 @@ MainWindow::start()
  }

  QString torrc = settings.getTorrc();
  if(QDir(QFileInfo(torrc).filePath()).isRelative())
    torrc = QCoreApplication::applicationDirPath() + "/" + torrc;

  if(settings.bootstrap()) {
    QString boottorrc = settings.bootstrapFrom();
@@ -1075,6 +1089,9 @@ MainWindow::start()

  /* Specify Tor's data directory, if different from the default */
  QString dataDirectory = settings.getDataDirectory();
  if(QDir(dataDirectory).isRelative())
    dataDirectory = QCoreApplication::applicationDirPath() + "/" + dataDirectory;

  QString expDataDirectory = expand_filename(dataDirectory);
  if (!dataDirectory.isEmpty())
    args << "DataDirectory" << expDataDirectory;
@@ -1129,7 +1146,10 @@ MainWindow::start()
   * start. */
  _isIntentionalExit = true;
  /* Kick off the Tor process */
  _torControl->start(settings.getExecutable(), args);
  QString torExecutable = settings.getExecutable();
  if(QDir(QFileInfo(torExecutable).filePath()).isRelative())
    torExecutable = QCoreApplication::applicationDirPath() + "/" + torExecutable;
  _torControl->start(torExecutable, args);
}

/** Called when the user changes a setting that needs Tor restarting */
+59 −2
Original line number Diff line number Diff line
@@ -31,6 +31,10 @@
#define SETTING_SHOW_MAINWINDOW_AT_START  "ShowMainWindowAtStart"
#define SETTING_BROWSER_EXECUTABLE        "BrowserExecutable"
#define SETTING_BROWSER_DIRECTORY         "BrowserDirectory"
#define SETTING_PROFILE_DIRECTORY          "ProfileDirectory"
#define SETTING_DEFAULT_PROFILE_DIRECTORY  "DefaultProfileDirectory"
#define SETTING_PLUGINS_DIRECTORY          "PluginsDirectory"
#define SETTING_DEFAULT_PLUGINS_DIRECTORY  "DefaultPluginsDirectory"
#define SETTING_IM_EXECUTABLE       "IMExecutable"
#define SETTING_RUN_PROXY_AT_START  "RunProxyAtStart"
#define SETTING_PROXY_EXECUTABLE    "ProxyExecutable"
@@ -86,6 +90,11 @@ VidaliaSettings::VidaliaSettings()
  setDefault(SETTING_LOCAL_GEOIP_DATABASE, "");
  setDefault(SETTING_ICON_PREF, Both);
  setDefault(SETTING_SKIP_VERSION_CHECK, false);

  setDefault(SETTING_PROFILE_DIRECTORY, "");
  setDefault(SETTING_DEFAULT_PROFILE_DIRECTORY, "");
  setDefault(SETTING_PLUGINS_DIRECTORY, "");
  setDefault(SETTING_DEFAULT_PLUGINS_DIRECTORY, "");
}

/** Gets the currently preferred language code for Vidalia. */
@@ -363,3 +372,51 @@ VidaliaSettings::skipVersionCheck() const
{
  return value(SETTING_SKIP_VERSION_CHECK).toBool();
}

QString
VidaliaSettings::getDefaultProfileDirectory() const
{
  return QDir::convertSeparators(value(SETTING_DEFAULT_PROFILE_DIRECTORY).toString());
}

void
VidaliaSettings::setDefaultProfileDirectory(const QString &dir)
{
  setValue(SETTING_DEFAULT_PROFILE_DIRECTORY, dir);
}

QString
VidaliaSettings::getProfileDirectory() const
{
  return QDir::convertSeparators(value(SETTING_PROFILE_DIRECTORY).toString());
}

void
VidaliaSettings::setProfileDirectory(const QString &dir)
{
  setValue(SETTING_PROFILE_DIRECTORY, dir);
}

QString
VidaliaSettings::getPluginsDirectory() const
{
  return QDir::convertSeparators(value(SETTING_PLUGINS_DIRECTORY).toString());
}

void
VidaliaSettings::setPluginsDirectory(const QString &dir)
{
  setValue(SETTING_PLUGINS_DIRECTORY, dir);
}

QString
VidaliaSettings::getDefaultPluginsDirectory() const
{
  return QDir::convertSeparators(value(SETTING_DEFAULT_PLUGINS_DIRECTORY).toString());
}

void
VidaliaSettings::setDefaultPluginsDirectory(const QString &dir)
{
  setValue(SETTING_DEFAULT_PLUGINS_DIRECTORY, dir);
}
+10 −0
Original line number Diff line number Diff line
@@ -82,6 +82,16 @@ public:
   * If set to the empty string, the browser will not be started. */
  void setBrowserDirectory(const QString &browserDirectory);

  /** Browser directories */
  QString getDefaultProfileDirectory() const;
  void setDefaultProfileDirectory(const QString &dir);
  QString getProfileDirectory() const;
  void setProfileDirectory(const QString &dir);
  QString getPluginsDirectory() const;
  void setPluginsDirectory(const QString &dir);
  QString getDefaultPluginsDirectory() const;
  void setDefaultPluginsDirectory(const QString &dir);

  /** Returns a fully-qualified path to the IM client, including the
   * executable name. */
  QString getIMExecutable() const;