Page 1 of 1
Open playlist
Posted: 24 May 2014 15:55
by fizzebu
Hello,
is it possile to open a .xspf playlist? vlc.playlist.add only accepts playlist items so that's not working.
Any info is appreciated!
Re: Open playlist
Posted: 24 May 2014 17:03
by roland1
Hello,
iirc there are xml capabilities in the api, so, you might start there.
Regards
Re: Open playlist
Posted: 26 May 2014 21:49
by fizzebu
Thanks for the tip!
I ended up making my own files where I save the path. Now I want to add them to the playlist, but when I loop through them VLC crashes. I call vlc.playlist.enqueue a lot but that's just because I can't figure out how to add more than one item at once. I think it's possible because in the readme it says: "Add a bunch of items to the playlist."
Here's my code that crashes VLC:
Code: Select all
mytable = {}
number = 1
while true do
line = s:readline()
if line == nil then break end
mytable[number] = {}
mytable[number].path = "file:///" .. line
number = number + 1
end
for i = 1, #mytable do
vlc.playlist.enqueue({mytable[i]})
end
At first I had the enqueue in the while loop but then I tried if it would work outside but it doesn't. Any ideas?
Re: Open playlist
Posted: 27 May 2014 19:12
by mederi
vlc.playlist.enqueue(mytable)
Re: Open playlist
Posted: 27 May 2014 19:22
by fizzebu
vlc.playlist.enqueue(mytable)
It does add all of them but crashes VLC anyway. Why is it crashing? If I add those same videos from a folder it works.
Thanks though!
Re: Open playlist
Posted: 28 May 2014 12:20
by mederi
I cannot reproduce the VLC crashing problem. If I had your complete extension script and your playlist file causing crashing of VLC, I would test it on my system. What is your OS?
Re: Open playlist
Posted: 28 May 2014 14:09
by fizzebu
I 'm on Windows 8.1
My full code is:
Code: Select all
tadedPath = "taded.txt"
--playlistLocation = vlc.path
function key_press( var, old, new, data )
local key = new
--print("key_press:",tostring(key))
if true then
d:hide()
-- else
--vlc.msg.err("Key `"..key.."' isn't bound to any action.")
end
end
--vlc.var.add_callback( vlc.object.libvlc(), "key-pressed", key_press )
--vlc.var.add_callback( vlc.object.libvlc(), "action-triggered", action_trigger )
function saveToFile()
io.output(tadedPath)
io.write("-- vlcTADED --","\n")
io.write("Show Name","\n")
io.write("playlist id from last episode","\n") --currentID = vlc.playlist.current() -- clear playlist before loading new files with playlist.clear() for correct id
io.write("episode time","\n") --currentTime = vlc.var.get(inpt, "time")
io.write("\n","-- files --")
playlist = vlc.playlist.get()
for i, item in pairs(vlc.playlist.get("playlist",false).children) do
io.write("\n",item.path)
end
io.close()
end
function descriptor()
return {
title = "TADED";
version = "0.1";
author = "FizzeBu";
shortdesc = "Watch TV ALL DAY EVERYDAY";
description = "Continues TV-shows for the lazy minded.";
capabilities = {"input-listener"}
}
end
function readTADEDfile()
local s = vlc.stream( "file:///D:/Program%20Files%20%28x86%29/VideoLAN/VLC/taded.txt" ) -- specific to my system
if (s:readline() ~= "-- vlcTADED --" ) then return 0 end
buttonName = s:readline()
tadedID = s:readline()
tadedTime = s:readline()
s:readline() -- empty line for looks
d:set_title(s:readline())
vlc.playlist.clear()
mytable = {}
number = 1
while true do
line = s:readline()
if line == nil then break end
mytable[number] = {}
mytable[number].path = line
number = number + 1
end
vlc.playlist.enqueue(mytable)
end
function activate()
d = vlc.dialog( "My VLC Extension" )
d:set_title("TADED")
d:add_button("Create TADED file for this playlist", saveToFile,1,1)
d:add_button("readTADEDfile", readTADEDfile,1,2)
readTADEDfile ()
--d:show()
end
and the playlist file looks something loke this:
Code: Select all
-- vlcTADED --
Show Name
playlist id from last episode
episode time
-- files --
file:///D:/Videos/...
file:///D:/Videos/...
file:///D:/Videos/...
btw I sent you a PM
Re: Open playlist
Posted: 28 May 2014 16:59
by mederi
I also experienced the same troubles on my system. The solution is:
Code: Select all
function meta_changed()
-- You better always define this empty function even if you do not need it
-- and even if "meta-listener" capability is not specified in descriptor()!
end
function input_changed()
-- Related to "input-listener" capability specified in descriptor().
end
function close()
-- Related to dialog box close event.
end
function deactivate()
end
Missing function meta_changed() seems to be very critical in your extension.
Re: Open playlist
Posted: 28 May 2014 17:26
by fizzebu
Thank you so much! It works now!
Re: Open playlist
Posted: 05 Jun 2014 23:34
by fizzebu
Hey, I really enjoy watching my shows on autopilot, but there's still some stuff I want to do. I figured I post in this thread and don't start a new one, but if I should make a new one for SEO reasons or whatever I can do that.
I have some bugs and questions, I hope you can help:
- So some of my video files display a string that I don't want to display there. I don't know where it's saved, but if I set the Artist and Album on my playlist items it displays correctly. However, when I add items like this there is no duration displayed, and the title changes again when I play that playlist item. How can I always have the duration and the correct title displayed?
Oh and the files do not display any artist or album when I view the information from right click in the playlist.
- When I shutdown directly, without closing VLC first my position is not saved. Is there a function like activate and deactivate but for when VLC shuts down? I thought the extension would get deactivated but apparently not.
- I would like to auto-load my extension, is there any workaround since it's not supported? (I found this 4 years old but still active request: https://trac.videolan.org/vlc/ticket/3883)
- Even though I use vlc.playlist.clear() My ids are screwed. If I don't have a freshly started VLC instance I can't use my extension because the IDs are all wrong and I end up with the wrong video.
Re: Open playlist
Posted: 09 Jun 2014 12:47
by mederi
There are metadata tags stored in your media (avi, mp4, mp3, mkv, ...). You should use some metadata editor to edit them or remove them. VLC is preparsing all media when loaded in VLC playlist to retrieve metadata (title, artist, album, ... and duration) and parsing particular media when starting to play. You can only disable automatic preparsing in VLC preferences, but main parsing always updates meta information according to metadata tags.
If you enqueue a path with duration in VLC playlist, you should have them there.
If deactivate() does not work in case of direct shutdown of the system then it is the query for VLC developers.
The solution for autostart of chosen extensions has been suggested ("automatic" subfolder), but no developer decided to implement it yet. I do not know any workaround for this.
You better use paths as index instead of IDs. Paths are usually unique. Then you can read VLC playlist to find out actual IDs and then use vlc.playlist.goto( id ) or vlc.playlist.gotoitem( id ).
Re: Open playlist
Posted: 08 Jul 2014 12:56
by fizzebu
I finally got around to work on this and I got almost everything, nice!
The string was saved as mkv segment title, I think that's not a standard meta tag so VLC didn't display it in "Information". I removed them all with a program called mkvmerge. Now that the segment title is gone I also don't have to set artist and album and text anymore and the duration gets displayed right from the start automatically.
deactivate() actually did work, however VLC cleared the playlist before deactivating so I was trying to get info on the playlist and there was nothing there so it didn't work. Now I don't save the config file if there isn't any video playing.
It sucks that it's not possible to autostart an extension. Is there any other option to get attention to this issue? There is this ticket, what else can we do?
And I use paths now, works like a charm, thanks!
Re: Open playlist
Posted: 05 Aug 2014 11:42
by fizzebu
I have another problem: How can I find out if there are already config files and I don't need to create new ones? I tried with io but it gives me an error and the addon can't start.
Oh wow, I will try to write to the script itself, just thought of that. But is there anything else I could do?
Re: Open playlist
Posted: 07 Aug 2014 12:21
by mederi
You can only try to read files and use some safe directory.
Code: Select all
local file, err, code = io.open(path, "r")
if file then io.close(file) end