#include <sys/time.h>
#include <sys/stat.h>
-#include <stdio.h> // for rename(), sigh
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+
#include "pbd/convert.h"
#include "pbd/basename.h"
#include "pbd/stl_delete.h"
#include "ardour/source.h"
#include "ardour/utils.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace ARDOUR;
, _file_is_new (!origin.empty()) // if origin is left unspecified (empty string) then file must exist
, _channel (0)
, _origin (origin)
+ , _gain (1.f)
{
set_within_session_from_path (path);
}
: Source (session, node)
, _file_is_new (false)
, _channel (0)
+ , _gain (1.f)
{
/* this setting of _path is temporary - we expect derived classes
to call ::init() which will actually locate the file
int
FileSource::set_state (const XMLNode& node, int /*version*/)
{
- const XMLProperty* prop;
-
- if ((prop = node.property (X_("channel"))) != 0) {
- _channel = atoi (prop->value());
- } else {
+ if (!node.get_property (X_("channel"), _channel)) {
_channel = 0;
}
- if ((prop = node.property (X_("origin"))) != 0) {
- _origin = prop->value();
+ node.get_property (X_("origin"), _origin);
+
+ if (!node.get_property (X_("gain"), _gain)) {
+ _gain = 1.f;
}
return 0;
}
}
- if (::rename (_path.c_str(), newpath.c_str()) != 0) {
+ if (::g_rename (_path.c_str(), newpath.c_str()) != 0) {
PBD::error << string_compose (
_("cannot rename file source from %1 to %2 (%3)"),
- _path, newpath, strerror (errno)) << endmsg;
+ _path, newpath, g_strerror (errno)) << endmsg;
return -1;
}
if (move_dependents_to_trash() != 0) {
/* try to back out */
- ::rename (newpath.c_str(), _path.c_str());
+ ::g_rename (newpath.c_str(), _path.c_str());
return -1;
}
/** Find the actual source file based on \a filename.
*
- * If the source is within the session tree, \a filename should be a simple filename (no slashes).
- * If the source is external, \a filename should be a full path.
+ * If the source is within the session tree, \a path should be a simple filename (no slashes).
+ * If the source is external, \a path should be a full path.
* In either case, found_path is set to the complete absolute path of the source file.
- * \return true iff the file was found.
+ * \return true if the file was found.
*/
bool
FileSource::find (Session& s, DataType type, const string& path, bool must_exist,
if (cnt > 1) {
error << string_compose (
- _("FileSource: \"%1\" is ambigous when searching\n\t"), pathstr) << endmsg;
+ _("FileSource: \"%1\" is ambiguous when searching\n\t"), pathstr) << endmsg;
goto out;
} else if (cnt == 0) {
if (must_exist) {
error << string_compose(
_("Filesource: cannot find required file (%1): %2"),
- path, strerror (errno)) << endmsg;
+ path, g_strerror (errno)) << endmsg;
goto out;
}
if (errno != ENOENT) {
error << string_compose(
_("Filesource: cannot check for existing file (%1): %2"),
- path, strerror (errno)) << endmsg;
+ path, g_strerror (errno)) << endmsg;
goto out;
}
#endif
}
}
+
+void
+FileSource::replace_file (const std::string& newpath)
+{
+ close ();
+ _path = newpath;
+ _name = Glib::path_get_basename (newpath);
+}
+
void
FileSource::inc_use_count ()
{
if (Glib::file_test (oldpath.c_str(), Glib::FILE_TEST_EXISTS)) {
/* rename only needed if file exists on disk */
- if (::rename (oldpath.c_str(), newpath.c_str()) != 0) {
- error << string_compose (_("cannot rename file %1 to %2 (%3)"), oldpath, newpath, strerror(errno)) << endmsg;
+ if (::g_rename (oldpath.c_str(), newpath.c_str()) != 0) {
+ error << string_compose (_("cannot rename file %1 to %2 (%3)"), oldpath, newpath, g_strerror(errno)) << endmsg;
return -1;
}
}