summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/session_directory.h
blob: 6f4126e0bbab6b049bed0bf502a63eba627d30b1 (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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
	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 <map>

#include "ardour/libardour_visibility.h"

namespace ARDOUR {

class LIBARDOUR_API SessionDirectory
{
public:

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

	/**
	 * Change the root path of this SessionDirectory object
	 */
	SessionDirectory& operator= (const std::string& path);

	/**
	 * @return the absolute path to the root directory of the session
	 */
	const std::string 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 std::string sound_path () const;

	/**
	 * @return the absolute path to the directory in which
	 * the session stores audio files for Ardour 2.X.
	 *
	 * 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 std::string sound_path_2X () const;

	/**
	 * @return the absolute path to the directory in which
	 * the session stores MIDI files, ie
	 * root_path()/interchange/session_name/midifiles
	 */
	const std::string 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 std::string midi_patch_path () const;

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

	/**
	 * @return The absolute path to the directory in which all
	 * video files are stored for a session.
	 */
	const std::string video_path () const;

	/**
	 * @return The absolute path to the directory that source
	 * files are moved to when they are no longer part of the
	 * session.
	 */
	const std::string dead_path () const;

	/**
	 * @return The absolute path to the directory that audio
	 * files are created in by default when exporting.
	 */
	const std::string 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.
	 *
	 * @return true If a new session directory and subdirectories were
	 * created, otherwise false.
	 *
	 * @post is_valid ()
	 */
	bool create ();

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

	/**
	 * @return The path to the directory under which source directories
	 * are created for different source types in Ardour 2.X
	 * i.e root_path()/interchange/session_name
	 */
	const std::string sources_root_2X() const;

private:

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

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

	/// The path to the root of the session directory.
	std::string m_root_path;

	static std::map<std::string,std::string> root_cache;
};

} // namespace ARDOUR

#endif