17914280cSJonas Sundström/*
27914280cSJonas Sundström * Copyright 2009 Haiku Inc.
37914280cSJonas Sundström * All rights reserved. Distributed under the terms of the MIT License.
47914280cSJonas Sundström */
57914280cSJonas Sundström#ifndef _OPEN_WITH_TRACKER_H
67914280cSJonas Sundström#define _OPEN_WITH_TRACKER_H
77914280cSJonas Sundström
87914280cSJonas Sundström
97914280cSJonas Sundström#include <Entry.h>
107914280cSJonas Sundström#include <FindDirectory.h>
117914280cSJonas Sundström#include <Message.h>
127914280cSJonas Sundström#include <Messenger.h>
137914280cSJonas Sundström#include <Path.h>
147914280cSJonas Sundström
157914280cSJonas Sundström
167914280cSJonas Sundströmstatus_t
177914280cSJonas SundströmOpenWithTracker(const entry_ref* ref)
187914280cSJonas Sundström{
197914280cSJonas Sundström	status_t status;
207914280cSJonas Sundström	BMessage message(B_REFS_RECEIVED);
217914280cSJonas Sundström	message.AddRef("refs", ref);
227914280cSJonas Sundström
237914280cSJonas Sundström	BMessenger tracker("application/x-vnd.Be-TRAK");
247914280cSJonas Sundström	status = tracker.SendMessage(&message);
257914280cSJonas Sundström	return status;
267914280cSJonas Sundström}
277914280cSJonas Sundström
287914280cSJonas Sundström
297914280cSJonas Sundströmstatus_t
307914280cSJonas SundströmOpenWithTracker(const char* path)
317914280cSJonas Sundström{
327914280cSJonas Sundström	status_t status;
337914280cSJonas Sundström	entry_ref ref;
347914280cSJonas Sundström	status = get_ref_for_path(path, &ref);
357914280cSJonas Sundström	if (status != B_OK)
367914280cSJonas Sundström		return status;
377914280cSJonas Sundström
387914280cSJonas Sundström	return OpenWithTracker(&ref);
397914280cSJonas Sundström}
407914280cSJonas Sundström
417914280cSJonas Sundström
427914280cSJonas Sundströmstatus_t
430d62f09dSJonas SundströmOpenWithTracker(directory_which which, const char* relativePath = NULL,
447914280cSJonas Sundström	bool createDirectory = false, BVolume* volume = NULL)
457914280cSJonas Sundström{
467914280cSJonas Sundström	status_t status;
477914280cSJonas Sundström	BPath path;
487914280cSJonas Sundström	find_directory(which, &path, createDirectory, volume);
490d62f09dSJonas Sundström
500d62f09dSJonas Sundström	if (relativePath)
510d62f09dSJonas Sundström		path.Append(relativePath);
527914280cSJonas Sundström
537914280cSJonas Sundström	entry_ref ref;
547914280cSJonas Sundström	BEntry entry(path.Path());
557914280cSJonas Sundström
567914280cSJonas Sundström	if (!entry.Exists())
577914280cSJonas Sundström		return B_NAME_NOT_FOUND;
587914280cSJonas Sundström
597914280cSJonas Sundström	status = entry.GetRef(&ref);
607914280cSJonas Sundström	if (status != B_OK)
617914280cSJonas Sundström		return status;
627914280cSJonas Sundström
637914280cSJonas Sundström	return OpenWithTracker(&ref);
647914280cSJonas Sundström}
657914280cSJonas Sundström
667914280cSJonas Sundström
677914280cSJonas Sundström#endif	// _OPEN_WITH_TRACKER_H
687914280cSJonas Sundström
69