Beispiel #1
0
  /**
   * Synchronously upload an updated meta/global.
   *
   * <p>All problems are logged and ignored.
   */
  public void uploadUpdatedMetaGlobal() {
    updateMetaGlobalInPlace();

    Logger.debug(LOG_TAG, "Uploading updated meta/global record.");
    final Object monitor = new Object();

    Runnable doUpload =
        new Runnable() {
          @Override
          public void run() {
            config.metaGlobal.upload(
                new MetaGlobalDelegate() {
                  @Override
                  public void handleSuccess(MetaGlobal global, SyncStorageResponse response) {
                    Logger.info(LOG_TAG, "Successfully uploaded updated meta/global record.");
                    // Engine changes are stored as diffs, so update enabled engines in config to
                    // match uploaded meta/global.
                    config.enabledEngineNames = config.metaGlobal.getEnabledEngineNames();
                    // Clear userSelectedEngines because they are updated in config and meta/global.
                    config.userSelectedEngines = null;

                    synchronized (monitor) {
                      monitor.notify();
                    }
                  }

                  @Override
                  public void handleMissing(MetaGlobal global, SyncStorageResponse response) {
                    Logger.warn(
                        LOG_TAG,
                        "Got 404 missing uploading updated meta/global record; shouldn't happen.  Ignoring.");
                    synchronized (monitor) {
                      monitor.notify();
                    }
                  }

                  @Override
                  public void handleFailure(SyncStorageResponse response) {
                    Logger.warn(LOG_TAG, "Failed to upload updated meta/global record; ignoring.");
                    synchronized (monitor) {
                      monitor.notify();
                    }
                  }

                  @Override
                  public void handleError(Exception e) {
                    Logger.warn(
                        LOG_TAG,
                        "Got exception trying to upload updated meta/global record; ignoring.",
                        e);
                    synchronized (monitor) {
                      monitor.notify();
                    }
                  }
                });
          }
        };

    final Thread upload = new Thread(doUpload);
    synchronized (monitor) {
      try {
        upload.start();
        monitor.wait();
        Logger.debug(LOG_TAG, "Uploaded updated meta/global record.");
      } catch (InterruptedException e) {
        Logger.error(LOG_TAG, "Uploading updated meta/global interrupted; continuing.");
      }
    }
  }