Display more useful error messages when project loading fails.
This commit is contained in:
parent
621e278f38
commit
fd747b235f
|
@ -296,6 +296,8 @@ Engine::init ( void )
|
||||||
|
|
||||||
_sample_rate = frame_rate();
|
_sample_rate = frame_rate();
|
||||||
|
|
||||||
|
MESSAGE( "Jack sample rate is %lu", (unsigned long)_sample_rate );
|
||||||
|
|
||||||
timeline->_sample_rate = frame_rate();
|
timeline->_sample_rate = frame_rate();
|
||||||
|
|
||||||
/* we don't need to create any ports until tracks are created */
|
/* we don't need to create any ports until tracks are created */
|
||||||
|
|
|
@ -33,8 +33,8 @@
|
||||||
#include "Loggable.H"
|
#include "Loggable.H"
|
||||||
#include "Project.H"
|
#include "Project.H"
|
||||||
|
|
||||||
#include "Timeline.H" // for sample_rate();
|
#include "Timeline.H" // for sample_rate()
|
||||||
|
#include "Engine/Engine.H" // for sample_rate()
|
||||||
#include "TLE.H" // all this just for load and save...
|
#include "TLE.H" // all this just for load and save...
|
||||||
|
|
||||||
#include <FL/filename.H>
|
#include <FL/filename.H>
|
||||||
|
@ -51,6 +51,15 @@ const int PROJECT_VERSION = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const char *Project::_errstr[] =
|
||||||
|
{
|
||||||
|
"Not a Non-DAW project",
|
||||||
|
"Locked by another process",
|
||||||
|
"Access denied",
|
||||||
|
"Samplerate mismatch",
|
||||||
|
"Incompatible project version"
|
||||||
|
};
|
||||||
|
|
||||||
char Project::_name[256];
|
char Project::_name[256];
|
||||||
char Project::_path[512];
|
char Project::_path[512];
|
||||||
bool Project::_is_open = false;
|
bool Project::_is_open = false;
|
||||||
|
@ -107,7 +116,7 @@ Project::write_info ( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Project::read_info ( void )
|
Project::read_info ( int *version, nframes_t *sample_rate )
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
@ -124,27 +133,9 @@ Project::read_info ( void )
|
||||||
MESSAGE( "Info: %s = %s", name, value );
|
MESSAGE( "Info: %s = %s", name, value );
|
||||||
|
|
||||||
if ( ! strcmp( name, "sample rate" ) )
|
if ( ! strcmp( name, "sample rate" ) )
|
||||||
{
|
*sample_rate = atoll( value );
|
||||||
nframes_t rate = atoll( value );
|
|
||||||
|
|
||||||
if ( rate != timeline->sample_rate() )
|
|
||||||
WARNING( "incorrect samplerate" );
|
|
||||||
}
|
|
||||||
else if ( ! strcmp( name, "version" ) )
|
else if ( ! strcmp( name, "version" ) )
|
||||||
{
|
*version = atoi( value );
|
||||||
int version = atoi( value );
|
|
||||||
|
|
||||||
if ( version < PROJECT_VERSION )
|
|
||||||
{
|
|
||||||
WARNING( "Incompatible project version. You must to use \"non-project-convert %d-%d\" to update this project's version", version, PROJECT_VERSION );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if ( version > PROJECT_VERSION )
|
|
||||||
{
|
|
||||||
WARNING( "Incompatible project version (%d).", version );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
free( name );
|
free( name );
|
||||||
free( value );
|
free( value );
|
||||||
|
@ -224,16 +215,21 @@ Project::open ( const char *name )
|
||||||
chdir( name );
|
chdir( name );
|
||||||
|
|
||||||
if ( ! acquire_lock( &_lockfd, ".lock" ) )
|
if ( ! acquire_lock( &_lockfd, ".lock" ) )
|
||||||
{
|
return E_LOCKED;
|
||||||
WARNING( "Could not open project: locked by another process!" );
|
|
||||||
return Project::E_LOCKED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! read_info() )
|
int version;
|
||||||
|
nframes_t rate;
|
||||||
|
|
||||||
|
if ( ! read_info( &version, &rate ) )
|
||||||
return E_INVALID;
|
return E_INVALID;
|
||||||
|
|
||||||
|
if ( version != PROJECT_VERSION )
|
||||||
|
return E_VERSION;
|
||||||
|
|
||||||
if ( ! Loggable::open( "history" ) )
|
if ( ! Loggable::open( "history" ) )
|
||||||
FATAL( "error opening journal" );
|
return E_INVALID;
|
||||||
|
|
||||||
|
timeline->sample_rate( rate );
|
||||||
|
|
||||||
set_name( name );
|
set_name( name );
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
const char template_dir[] = "share/non-daw/templates";
|
const char template_dir[] = "share/non-daw/templates";
|
||||||
const char user_template_dir[] = "~/.non-daw/templates";
|
const char user_template_dir[] = "~/.non-daw/templates";
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
class Project
|
class Project
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -29,9 +31,11 @@ class Project
|
||||||
static char _path[512];
|
static char _path[512];
|
||||||
|
|
||||||
static bool write_info ( void );
|
static bool write_info ( void );
|
||||||
static bool read_info ( void );
|
static bool read_info ( int *version, nframes_t *sample_rate );
|
||||||
static void set_name ( const char *name );
|
static void set_name ( const char *name );
|
||||||
|
|
||||||
|
static const char *_errstr[];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -39,8 +43,12 @@ public:
|
||||||
E_INVALID = -1,
|
E_INVALID = -1,
|
||||||
E_LOCKED = -2,
|
E_LOCKED = -2,
|
||||||
E_PERM = -3,
|
E_PERM = -3,
|
||||||
|
E_SAMPLERATE = -4,
|
||||||
|
E_VERSION = -5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *errstr ( int n ) { return _errstr[ ( 0 - n ) - 1 ]; }
|
||||||
|
|
||||||
static const char *name ( void ) { return Project::_name; }
|
static const char *name ( void ) { return Project::_name; }
|
||||||
static void compact ( void );
|
static void compact ( void );
|
||||||
static bool close ( void );
|
static bool close ( void );
|
||||||
|
|
|
@ -161,7 +161,7 @@ Loggable::progress_callback( &TLE::progress_cb, this );} {}
|
||||||
} {
|
} {
|
||||||
Fl_Window main_window {
|
Fl_Window main_window {
|
||||||
label Timeline open
|
label Timeline open
|
||||||
xywh {174 117 1025 770} type Double resizable xclass Non_DAW visible
|
xywh {279 117 1025 770} type Double resizable xclass Non_DAW visible
|
||||||
} {
|
} {
|
||||||
Fl_Menu_Bar menubar {open
|
Fl_Menu_Bar menubar {open
|
||||||
xywh {0 0 1024 25}
|
xywh {0 0 1024 25}
|
||||||
|
@ -194,33 +194,7 @@ main_window->redraw();}
|
||||||
label {&Open}
|
label {&Open}
|
||||||
callback {const char *name = fl_dir_chooser( "Open Project", NULL, NULL );
|
callback {const char *name = fl_dir_chooser( "Open Project", NULL, NULL );
|
||||||
|
|
||||||
if ( ! name )
|
open( name );}
|
||||||
return;
|
|
||||||
|
|
||||||
|
|
||||||
int r = Project::open( name );
|
|
||||||
|
|
||||||
if ( r < 0 )
|
|
||||||
{
|
|
||||||
const char *s = "";
|
|
||||||
|
|
||||||
switch ( r )
|
|
||||||
{
|
|
||||||
case Project::E_LOCKED:
|
|
||||||
s = "Locked by another process";
|
|
||||||
break;
|
|
||||||
case Project::E_PERM:
|
|
||||||
s = "Access denied";
|
|
||||||
break;
|
|
||||||
case Project::E_INVALID:
|
|
||||||
s = "Not a Non-DAW project";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fl_alert( "Could not open project \\"%s\\":\\n\\n\\t%s", name, s );
|
|
||||||
// we are in a somewhar ambiguous state now with no project open.
|
|
||||||
}}
|
|
||||||
xywh {10 10 40 25}
|
xywh {10 10 40 25}
|
||||||
}
|
}
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
|
@ -230,7 +204,7 @@ if ( r < 0 )
|
||||||
if ( n != 2 )
|
if ( n != 2 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Project::compact();} selected
|
Project::compact();}
|
||||||
xywh {20 20 40 25}
|
xywh {20 20 40 25}
|
||||||
}
|
}
|
||||||
Submenu {} {
|
Submenu {} {
|
||||||
|
@ -850,6 +824,21 @@ progress->redraw();
|
||||||
|
|
||||||
Fl::check();} {}
|
Fl::check();} {}
|
||||||
}
|
}
|
||||||
|
Function {open( const char *name )} {open
|
||||||
|
} {
|
||||||
|
code {if ( ! name )
|
||||||
|
return;
|
||||||
|
|
||||||
|
int r = Project::open( name );
|
||||||
|
|
||||||
|
if ( r < 0 )
|
||||||
|
{
|
||||||
|
const char *s = Project::errstr( r );
|
||||||
|
|
||||||
|
fl_alert( "Could not open project \\"%s\\":\\n\\n\\t%s", name, s );
|
||||||
|
}} {selected
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class New_Project_Dialog {open
|
class New_Project_Dialog {open
|
||||||
|
|
|
@ -146,6 +146,7 @@ public:
|
||||||
nframes_t fpp ( void ) const { return 1 << _fpp; }
|
nframes_t fpp ( void ) const { return 1 << _fpp; }
|
||||||
|
|
||||||
nframes_t length ( void ) const;
|
nframes_t length ( void ) const;
|
||||||
|
void sample_rate ( nframes_t r ) { _sample_rate = r; }
|
||||||
nframes_t sample_rate ( void ) const { return _sample_rate; }
|
nframes_t sample_rate ( void ) const { return _sample_rate; }
|
||||||
int ts_to_x( nframes_t ts ) const { return ts >> _fpp; }
|
int ts_to_x( nframes_t ts ) const { return ts >> _fpp; }
|
||||||
nframes_t x_to_ts ( int x ) const { return x << _fpp; }
|
nframes_t x_to_ts ( int x ) const { return x << _fpp; }
|
||||||
|
|
|
@ -140,10 +140,7 @@ main ( int argc, char **argv )
|
||||||
tle->run();
|
tle->run();
|
||||||
|
|
||||||
if ( argc > 1 )
|
if ( argc > 1 )
|
||||||
if ( Project::open( argv[ 1 ] ) != 0 )
|
tle->open( argv[ 1 ] );
|
||||||
FATAL( "Could not open project specified on command line" );
|
|
||||||
|
|
||||||
/* FIXME: open project in /tmp if none is given? */
|
|
||||||
|
|
||||||
Fl::run();
|
Fl::run();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue