]> git.tdb.fi Git - xinema.git/blobdiff - source/xinema.cpp
Pass expose events to Xine
[xinema.git] / source / xinema.cpp
index e4051cda3f15d5bb35bee8f474667d03d59f7190..feab3272fcc2a85034ef043f3fb471d93ba45d10 100644 (file)
@@ -1,5 +1,5 @@
 #include <sigc++/bind.h>
-#include <msp/core/getopt.h>
+#include <msp/time/utils.h>
 #include "xineengine.h"
 #include "xinema.h"
 #include "xinestream.h"
@@ -7,13 +7,12 @@
 using namespace std;
 using namespace Msp;
 
-Xinema::Xinema(int argc, char **argv):
-       window(display, 1920, 1080)
+Xinema::Xinema(int, char **):
+       window(display, 1920, 1080),
+       network(*this),
+       engine(0),
+       stream(0)
 {
-       GetOpt getopt;
-       getopt.add_argument("filename", filename, GetOpt::REQUIRED_ARG);
-       getopt(argc, argv);
-
        window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Xinema::exit), 0));
 }
 
@@ -23,12 +22,11 @@ int Xinema::main()
        display.tick();
 
        engine = new XineEngine(window, &display_mutex);
-       stream = new XineStream(*engine, filename);
-       stream->play();
 
        Application::main();
 
-       delete stream;
+       if(stream)
+               delete stream;
        delete engine;
 
        return exit_code;
@@ -36,10 +34,31 @@ int Xinema::main()
 
 void Xinema::tick()
 {
+       {
+               MutexLock lock(command_mutex);
+               if(!pending_mrl.empty())
+               {
+                       delete stream;
+                       stream = new XineStream(*engine, pending_mrl);
+                       stream->play();
+                       pending_mrl.clear();
+               }
+       }
+
        {
                MutexLock lock(display_mutex);
                display.tick();
        }
 
-       stream->tick();
+       engine->tick();
+       if(stream)
+               stream->tick();
+
+       Time::sleep(10*Time::msec);
+}
+
+void Xinema::play_file(const FS::Path &fn)
+{
+       MutexLock lock(command_mutex);
+       pending_mrl = "file://"+fn.str();
 }