summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/session_directory.h
blob: 9a3f4d4d77b80b66c2fd51060dae90ec73d2d30a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
	Copyright (C) 2007 Tim Mayberry 

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef __ardour_session_directory_h__
#define __ardour_session_directory_h__

#include <string>
#include <vector>

#include "pbd/filesystem.h"

namespace ARDOUR {

class SessionDirectory
{
public:

	/**
	 * @param session_path An absolute path to a session directory.
	 */
	SessionDirectory (const PBD::sys::path& session_path);

	/**
	 * @return the absolute path to the root directory of the session
	 */
	const PBD::sys::path root_path() const { return m_root_path; }

	/**
	 * @return the absolute path to the directory in which 
	 * the session stores audio files.
	 *
	 * If the session is an older session with an existing
	 * "sounds" directory then it will return a path to that
	 * directory otherwise it will return the new location
	 * of root_path()/interchange/session_name/audiofiles
	 */
	const PBD::sys::path sound_path () const;
	
	/**
	 * @return the absolute path to the directory in which 
	 * the session stores MIDI files, ie
	 * root_path()/interchange/session_name/midifiles
	 */
	const PBD::sys::path midi_path () const;
	
	/**
	 * @return the absolute path to the directory in which 
	 * the session stores MIDNAM patch files, ie
	 * root_path()/interchange/session_name/patchfiles
	 */
	const PBD::sys::path midi_patch_path () const;

	/**
	 * @return The absolute path to the directory in which all
	 * peak files are stored for a session.
	 */
	const PBD::sys::path peak_path () const;

	/**
	 * @return The absolute path to the directory that audio
	 * files are moved to when they are no longer part of the
	 * session.
	 */
	const PBD::sys::path dead_sound_path () const;
	
	/**
	 * @return The absolute path to the directory that midi
	 * files are moved to when they are no longer part of the
	 * session.
	 */
	const PBD::sys::path dead_midi_path () const;

	/**
	 * @return The absolute path to the directory that audio
	 * files are created in by default when exporting.
	 */
	const PBD::sys::path export_path () const;

	/**
	 * @return true if session directory and all the required 
	 * subdirectories exist.
	 */
	bool is_valid () const;

	/**
	 * Create the session directory and all the subdirectories.
	 *
	 * @throw PBD::sys::filesystem_error if the directories were
	 * not able to be created.
	 *
	 * @return true If a new session directory was created, otherwise
	 * (if it already existed) false.
	 *
	 * @post is_valid ()
	 */
	bool create ();

protected:

	/**
	 * @return The path to the old style sound directory.
	 * It isn't created by create().
	 */
	const PBD::sys::path old_sound_path () const;

	/**
	 * @return The path to the directory under which source directories
	 * are created for different source types.
	 * i.e root_path()/interchange/session_name
	 */
	const PBD::sys::path sources_root() const;

	/**
	 * @return a vector containing the fullpath of all subdirectories.
	 */
	const std::vector<PBD::sys::path> sub_directories () const;

	/// The path to the root of the session directory.
	const PBD::sys::path m_root_path;
};

} // namespace ARDOUR

#endif