mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
lua consolidate playlist_ functions
The way to call the playlist functions has changed rb.playlist("option", var) rb.playlist_add(filename) = becomes rb.playlist("add", filename) added playlist.lua to the includes for conversion to old functions if your script is broken by this change you simply add `require("playlist")` to the top for the old functionality added rb.playlist_tracks(dir, filename) to playlist.lua this will allow you to add all tracks in a playlist.m3u8 to a lua table Change-Id: I87fcc56be365d8495d214f069331b6ddbfbef1db
This commit is contained in:
parent
b670fcd50d
commit
e4c5f5d412
4 changed files with 157 additions and 49 deletions
80
apps/plugins/lua/include_lua/playlist.lua
Normal file
80
apps/plugins/lua/include_lua/playlist.lua
Normal file
|
@ -0,0 +1,80 @@
|
|||
--[[ Lua RB Playlist Operations
|
||||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2018 William Wilgus
|
||||
*
|
||||
* 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 software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
]]
|
||||
|
||||
-- [[ conversion to old style playlist_ functions ]]
|
||||
if not rb.playlist then rb.splash(rb.HZ, "No Support!") return nil end
|
||||
|
||||
rb.playlist_amount = function()
|
||||
return rb.playlist("amount")
|
||||
end
|
||||
rb.playlist_add = function (filename)
|
||||
return rb.playlist("add", filename)
|
||||
end
|
||||
rb.playlist_create = function(dir, filename)
|
||||
return rb.playlist("create", dir, filename)
|
||||
end
|
||||
rb.playlist_start = function(index, elapsed, offset)
|
||||
rb.playlist("start", index, elapsed, offset)
|
||||
end
|
||||
rb.playlist_resume_track = function(index, crc, elapsed, offset)
|
||||
rb.playlist("resumetrack", index, crc, elapsed, offset)
|
||||
end
|
||||
rb.playlist_resume = function() return rb.playlist("resume") end
|
||||
rb.playlist_shuffle = function(random_seed, index)
|
||||
rb.playlist("shuffle", random_seed, index)
|
||||
end
|
||||
rb.playlist_sync = function () rb.playlist("sync") end
|
||||
rb.playlist_remove_all_tracks = function() return rb.playlist("removealltracks") end
|
||||
rb.playlist_insert_track = function(filename, pos, bqueue, bsync)
|
||||
return rb.playlist("inserttrack", filename, pos, bqueue, bsync)
|
||||
end
|
||||
rb.playlist_insert_directory = function(dir, pos, bqueue, brecurse)
|
||||
return rb.playlist("insertdirectory", dir, pos, bqueue, brecurse)
|
||||
end
|
||||
rb.playlist_tracks = function(dir, filename)
|
||||
local tracks = {}
|
||||
local count = 0
|
||||
local fullpath = dir .. "/" .. filename
|
||||
local file = io.open('/' .. fullpath, "r")
|
||||
|
||||
if not file then
|
||||
rb.splash(rb.HZ, "Error opening /" .. fullpath)
|
||||
return tracks
|
||||
end
|
||||
|
||||
-- strip BOM --"\xEF\xBB\xBF"
|
||||
local bom = file:read(3)
|
||||
if not string.find(bom, "\239\187\191") then
|
||||
file:seek("set", 0)
|
||||
end
|
||||
|
||||
for line in file:lines() do
|
||||
if string.len(line) > 3 and (not string.find(line, "%s*#.*")) then
|
||||
count = count + 1
|
||||
tracks[count] = line
|
||||
end
|
||||
end
|
||||
file:close()
|
||||
return tracks
|
||||
end
|
||||
|
|
@ -16,7 +16,8 @@ LUA_OBJ := $(call c2obj, $(LUA_SRC))
|
|||
OTHER_SRC += $(LUA_SRC)
|
||||
|
||||
LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua
|
||||
LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua image.lua lcd.lua math_ex.lua print.lua timer.lua)
|
||||
LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua image.lua lcd.lua math_ex.lua print.lua timer.lua playlist.lua)
|
||||
|
||||
|
||||
ifndef APP_TYPE
|
||||
ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET)))))
|
||||
|
|
|
@ -267,55 +267,84 @@ RB_WRAP(do_menu)
|
|||
return 1;
|
||||
}
|
||||
|
||||
RB_WRAP(playlist_sync)
|
||||
RB_WRAP(playlist)
|
||||
{
|
||||
/* just pass NULL to work with the current playlist */
|
||||
rb->playlist_sync(NULL);
|
||||
return 1;
|
||||
}
|
||||
/* just passes NULL to work with the current playlist */
|
||||
enum e_playlist {PLAYL_AMOUNT = 0, PLAYL_ADD, PLAYL_CREATE,
|
||||
PLAYL_START, PLAYL_RESUMETRACK, PLAYL_RESUME,
|
||||
PLAYL_SHUFFLE, PLAYL_SYNC, PLAYL_REMOVEALLTRACKS,
|
||||
PLAYL_INSERTTRACK, PLAYL_INSERTDIRECTORY, PLAYL_ECOUNT};
|
||||
|
||||
RB_WRAP(playlist_remove_all_tracks)
|
||||
{
|
||||
/* just pass NULL to work with the current playlist */
|
||||
int result = rb->playlist_remove_all_tracks(NULL);
|
||||
lua_pushinteger(L, result);
|
||||
return 1;
|
||||
}
|
||||
const char *playlist_option[] = {"amount", "add", "create", "start", "resumetrack",
|
||||
"resume", "shuffle", "sync", "removealltracks",
|
||||
"inserttrack", "insertdirectory", NULL};
|
||||
|
||||
RB_WRAP(playlist_insert_track)
|
||||
{
|
||||
const char *filename;
|
||||
int position, queue, sync;
|
||||
const char *filename, *dir;
|
||||
int result = 0;
|
||||
bool queue, recurse, sync;
|
||||
int pos, crc, index, random_seed;
|
||||
unsigned long elapsed, offset;
|
||||
|
||||
/* for now don't take a playlist_info pointer, but just pass NULL to use
|
||||
the current playlist. If this changes later, all the other
|
||||
parameters can be shifted back. */
|
||||
filename = luaL_checkstring(L, 1); /* only required parameter */
|
||||
position = luaL_optint(L, 2, PLAYLIST_INSERT);
|
||||
queue = lua_toboolean(L, 3); /* default to false */
|
||||
sync = lua_toboolean(L, 4); /* default to false */
|
||||
|
||||
int result = rb->playlist_insert_track(NULL, filename, position,
|
||||
queue, sync);
|
||||
|
||||
lua_pushinteger(L, result);
|
||||
return 1;
|
||||
}
|
||||
|
||||
RB_WRAP(playlist_insert_directory)
|
||||
{
|
||||
const char* dirname;
|
||||
int position, queue, recurse;
|
||||
|
||||
/* just like in playlist_insert_track, only works with current playlist. */
|
||||
dirname = luaL_checkstring(L, 1); /* only required parameter */
|
||||
position = luaL_optint(L, 2, PLAYLIST_INSERT);
|
||||
queue = lua_toboolean(L, 3); /* default to false */
|
||||
recurse = lua_toboolean(L, 4); /* default to false */
|
||||
|
||||
int result = rb->playlist_insert_directory(NULL, dirname, position,
|
||||
queue, recurse);
|
||||
int option = luaL_checkoption (L, 1, NULL, playlist_option);
|
||||
switch(option)
|
||||
{
|
||||
default:
|
||||
case PLAYL_AMOUNT:
|
||||
result = rb->playlist_amount();
|
||||
break;
|
||||
case PLAYL_ADD:
|
||||
filename = luaL_checkstring(L, 2);
|
||||
result = rb->playlist_add(filename);
|
||||
break;
|
||||
case PLAYL_CREATE:
|
||||
dir = luaL_checkstring(L, 2);
|
||||
filename = luaL_checkstring(L, 3);
|
||||
result = rb->playlist_create(dir, filename);
|
||||
break;
|
||||
case PLAYL_START:
|
||||
index = luaL_checkint(L, 2);
|
||||
elapsed = luaL_checkint(L, 3);
|
||||
offset = luaL_checkint(L, 4);
|
||||
rb->playlist_start(index, elapsed, offset);
|
||||
break;
|
||||
case PLAYL_RESUMETRACK:
|
||||
index = luaL_checkint(L, 2);
|
||||
crc = luaL_checkint(L, 3);
|
||||
elapsed = luaL_checkint(L, 4);
|
||||
offset = luaL_checkint(L, 5);
|
||||
rb->playlist_resume_track(index, (unsigned) crc, elapsed, offset);
|
||||
break;
|
||||
case PLAYL_RESUME:
|
||||
result = rb->playlist_resume();
|
||||
break;
|
||||
case PLAYL_SHUFFLE:
|
||||
random_seed = luaL_checkint(L, 2);
|
||||
index = luaL_checkint(L, 3);
|
||||
result = rb->playlist_shuffle(random_seed, index);
|
||||
break;
|
||||
case PLAYL_SYNC:
|
||||
rb->playlist_sync(NULL);
|
||||
break;
|
||||
case PLAYL_REMOVEALLTRACKS:
|
||||
result = rb->playlist_remove_all_tracks(NULL);
|
||||
break;
|
||||
case PLAYL_INSERTTRACK:
|
||||
filename = luaL_checkstring(L, 2); /* only required parameter */
|
||||
pos = luaL_optint(L, 3, PLAYLIST_INSERT);
|
||||
queue = lua_toboolean(L, 4); /* default to false */
|
||||
sync = lua_toboolean(L, 5); /* default to false */
|
||||
result = rb->playlist_insert_track(NULL, filename, pos, queue, sync);
|
||||
break;
|
||||
case PLAYL_INSERTDIRECTORY:
|
||||
dir = luaL_checkstring(L, 2); /* only required parameter */
|
||||
pos = luaL_optint(L, 3, PLAYLIST_INSERT);
|
||||
queue = lua_toboolean(L, 4); /* default to false */
|
||||
recurse = lua_toboolean(L, 5); /* default to false */
|
||||
result = rb->playlist_insert_directory(NULL, dir, pos, queue, recurse);
|
||||
break;
|
||||
}
|
||||
|
||||
rb->yield();
|
||||
lua_pushinteger(L, result);
|
||||
return 1;
|
||||
}
|
||||
|
@ -482,10 +511,6 @@ static const luaL_Reg rocklib[] =
|
|||
RB_FUNC(clear_viewport),
|
||||
RB_FUNC(current_path),
|
||||
RB_FUNC(gui_syncyesno_run),
|
||||
RB_FUNC(playlist_sync),
|
||||
RB_FUNC(playlist_remove_all_tracks),
|
||||
RB_FUNC(playlist_insert_track),
|
||||
RB_FUNC(playlist_insert_directory),
|
||||
RB_FUNC(do_menu),
|
||||
|
||||
/* Backlight helper */
|
||||
|
@ -513,6 +538,7 @@ static const luaL_Reg rocklib[] =
|
|||
RB_FUNC(create_numbered_filename),
|
||||
|
||||
RB_FUNC(audio),
|
||||
RB_FUNC(playlist),
|
||||
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
|
|
@ -76,6 +76,7 @@ my @forbidden_functions = ('^open$',
|
|||
'^__.+$',
|
||||
'^.+_(un)?cached$',
|
||||
'^audio_.+$',
|
||||
'playlist_.+$',
|
||||
'^round_value_to_list32$');
|
||||
|
||||
my $rocklib = sprintf("%s/rocklib.c", $ARGV[0]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue