/*******************************************************************************
  Copyright (c) 2011, 2012 Dmitry Matveev <me@dmitrymatveev.co.uk>

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
*******************************************************************************/

#ifndef __KQUEUE_HELPER_H
#define __KQUEUE_HELPER_H

#include <gio/glocalfilemonitor.h>
#include <gio/gfilemonitor.h>

#include "dep-list.h"

typedef struct _GKqueueFileMonitor GKqueueFileMonitor;

/**
 * kqueue_sub:
 * @mon: a pointer to the GKqueueFileMonitor which holds this subscription
 * @filename: a name of the file to monitor
 * @fd: the associated file descriptor (used by kqueue)
 *
 * Represents a subscription on a file or directory. To check whether a
 * subscription is active, check the fd field. If fd is not -1, it is an
 * active subscription which can emit events from kqueue.
 */
typedef struct
{
  GKqueueFileMonitor  *mon;
  GFileMonitorSource  *source;
  gchar*    filename;
  gchar*    basename;
  int       fd;
  dep_list* deps;
  int       is_dir;
} kqueue_sub;

gboolean _kqsub_start_watching (kqueue_sub *sub);
void _kh_dir_diff    (kqueue_sub *sub, gboolean handle_deleted);
void _km_add_missing (kqueue_sub *sub);
gboolean _km_scan_missing (kqueue_sub *check_this_sub_only);
void _km_remove      (kqueue_sub *sub);

#endif /* __KQUEUE_HELPER_H */
