/* 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/. */

/**
 * A worker dedicated for the I/O component of PageThumbs storage.
 *
 * Do not rely on the API of this worker. In a future version, it might be
 * fully replaced by a OS.File global I/O worker.
 */

"use strict";

importScripts("resource://gre/modules/osfile.jsm");

let PageThumbsWorker = {
  handleMessage: function Worker_handleMessage(aEvent) {
    let msg = aEvent.data;
    let data = {result: null, data: null};

    switch (msg.type) {
      case "removeFiles":
        data.result = this.removeFiles(msg);
        break;
      case "getFilesInDirectory":
        data.result = this.getFilesInDirectory(msg);
        break;
      default:
        data.result = false;
        data.detail = "message not understood";
        break;
    }

    self.postMessage(data);
  },

  getFilesInDirectory: function Worker_getFilesInDirectory(msg) {
    let iter = new OS.File.DirectoryIterator(msg.path);
    let entries = [];

    for (let entry in iter) {
      if (!entry.isDir && !entry.isSymLink) {
        entries.push(entry.name);
      }
    }

    iter.close();
    return entries;
  },

  removeFiles: function Worker_removeFiles(msg) {
    for (let file of msg.paths) {
      try {
        OS.File.remove(file);
      } catch (e) {
        // We couldn't remove the file for some reason.
        // Let's just continue with the next one.
      }
    }
    return true;
  }
};

self.onmessage = PageThumbsWorker.handleMessage.bind(PageThumbsWorker);
