void MvcpThread::do_cls(mvcp a_mvcp, QObject* parent) { QObjectList* result = new QObjectList; mvcp_dir dir = mvcp_dir_init(a_mvcp, parent->property("path").toString().toUtf8().constData()); int n = mvcp_dir_count(dir); for (int i = 0; i < n; i++) { mvcp_dir_entry_t entry; mvcp_dir_get(dir, i, &entry); QObject* o = new QObject; o->setObjectName(QString::fromUtf8(entry.full)); o->setProperty("name", QString::fromUtf8(entry.name)); o->setProperty("dir", entry.dir); o->setProperty("size", entry.size); result->append(o); } mvcp_dir_close(dir); emit clsResult(parent, result); }
mvcp_error_code client_load( client demo ) { mvcp_error_code error = mvcp_ok; int terminated = 0; int refresh = 1; int start = 0; strcpy( demo->current_directory, demo->last_directory ); term_init( ); while ( !terminated ) { mvcp_dir dir = mvcp_dir_init( demo->dv, demo->current_directory ); if ( mvcp_dir_count( dir ) == -1 ) { printf( "Invalid directory - retrying %s\n", demo->last_directory ); mvcp_dir_close( dir ); dir = mvcp_dir_init( demo->dv, demo->last_directory ); if ( mvcp_dir_count( dir ) == -1 ) { printf( "Invalid directory - going back to /\n" ); mvcp_dir_close( dir ); dir = mvcp_dir_init( demo->dv, "/" ); strcpy( demo->current_directory, "/" ); } else { strcpy( demo->current_directory, demo->last_directory ); } } terminated = mvcp_dir_count( dir ) == -1; if ( !terminated ) { int index = 0; int selected = 0; int max = 9; int end = 0; end = mvcp_dir_count( dir ); strcpy( demo->last_directory, demo->current_directory ); while ( !selected && !terminated ) { mvcp_dir_entry_t entry; int pressed; if ( refresh ) { const char *action = "Load & Play"; if ( demo->queues[ demo->selected_unit ].mode ) action = "Queue"; printf( "%s from %s\n\n", action, demo->current_directory ); if ( strcmp( demo->current_directory, "/" ) ) printf( "-: Parent directory\n" ); for ( index = start; index < end && ( index - start ) < max; index ++ ) { mvcp_dir_get( dir, index, &entry ); printf( "%d: %s\n", index - start + 1, entry.name ); } while ( ( index ++ % 9 ) != 0 ) printf( "\n" ); printf( "\n" ); if ( start + max < end ) printf( "space = more files" ); else if ( end > max ) printf( "space = return to start of list" ); if ( start > 0 ) printf( ", b = previous files" ); printf( "\n" ); printf( "0 = abort, t = transport, x = execute command, q = queue maintenance\n\n" ); refresh = 0; } client_change_status( demo, 1 ); pressed = term_read( ); switch( pressed ) { case -1: break; case '0': terminated = 1; break; case 'b': refresh = start - max >= 0; if ( refresh ) start = start - max; break; case ' ': refresh = start + max < end; if ( refresh ) { start = start + max; } else if ( end > max ) { start = 0; refresh = 1; } break; case '-': if ( strcmp( demo->current_directory, "/" ) ) { selected = 1; ( *strrchr( demo->current_directory, '/' ) ) = '\0'; ( *( strrchr( demo->current_directory, '/' ) + 1 ) ) = '\0'; } break; case 't': client_change_status( demo, 0 ); term_exit( ); client_transport( demo ); term_init( ); selected = 1; break; case 'x': client_change_status( demo, 0 ); term_exit( ); client_execute( demo ); term_init( ); selected = 1; break; case 'q': client_change_status( demo, 0 ); term_exit( ); client_queue_maintenance( demo, &demo->queues[ demo->selected_unit ] ); term_init( ); selected = 1; break; default: if ( pressed >= '1' && pressed <= '9' ) { if ( ( start + pressed - '1' ) < end ) { mvcp_dir_get( dir, start + pressed - '1', &entry ); selected = 1; strcat( demo->current_directory, entry.name ); } } break; } client_change_status( demo, 0 ); } mvcp_dir_close( dir ); } if ( !terminated && demo->current_directory[ strlen( demo->current_directory ) - 1 ] != '/' ) { if ( demo->queues[ demo->selected_unit ].mode == 0 ) { error = mvcp_unit_load( demo->dv, demo->selected_unit, demo->current_directory ); mvcp_unit_play( demo->dv, demo->selected_unit ); } else { client_queue_add( demo, &demo->queues[ demo->selected_unit ], demo->current_directory ); printf( "File %s added to queue.\n", demo->current_directory ); } strcpy( demo->current_directory, demo->last_directory ); refresh = 0; } else { refresh = 1; start = 0; } } term_exit( ); return error; }