summaryrefslogtreecommitdiff
path: root/testDir/src/dirscanner.cpp
diff options
context:
space:
mode:
authortim <tim@eclectronics.org>2017-06-13 21:57:54 +0100
committertim <tim@eclectronics.org>2017-06-13 21:57:54 +0100
commite7d2892633ba9761a8ab8cc98f812e2db89e8beb (patch)
treef1657ba4a6e449da416051e9851c59b7e4b96cae /testDir/src/dirscanner.cpp
parent2c3cdaa27878b6dfa23fae35239037f20f3ae6b1 (diff)
parenta0e8fefd1bf241b805c4542421bdbc6a4447fdc3 (diff)
Merge branch 'dirscanner'
Diffstat (limited to 'testDir/src/dirscanner.cpp')
-rw-r--r--testDir/src/dirscanner.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/testDir/src/dirscanner.cpp b/testDir/src/dirscanner.cpp
new file mode 100644
index 0000000..f3aa974
--- /dev/null
+++ b/testDir/src/dirscanner.cpp
@@ -0,0 +1,132 @@
+#include "dirscanner.h"
+
+void playItem::play(){
+ if (video.isLoaded()){
+ video.play();
+ ofLogNotice() << "playing video: "<<filename;
+ }
+ if (image.isAllocated()){
+ ofLogNotice() << "playing still: "<<filename;
+ }
+ startTime=ofGetElapsedTimef();
+}
+bool playItem::load(string _filename){
+ filename=_filename;
+ ofFile file(filename);
+ string ext=ofToLower(file.getExtension());
+ loaded=0;
+ if (ext=="jpg"||ext=="png"){
+ if (image.load(filename)){
+ ofLogNotice() << "loaded image: "<<filename;
+ loaded=1;
+ }
+ }
+ if (ext=="mp4"||ext=="mov"){
+ if (video.load(filename)){
+ ofLogNotice() << "loaded clip: "<<filename;
+ loaded=2;
+ }
+ }
+ return loaded>0;
+}
+void playItem::draw(){
+ if (image.isAllocated()){
+
+ //ofEnableAlphaBlending();
+ //ofSetColor(255,255,255,1.0);
+ image.draw(0,0);
+ //ofDisableAlphaBlending();
+
+ if (ofGetElapsedTimef()-startTime>5.0){
+ isFinished=true;
+ }
+ }
+ if (video.isLoaded()){
+ video.draw(0,0);
+ if (video.getIsMovieDone()){
+ isFinished=true;
+ }
+ }
+}
+
+void dirScanner::scan(){
+ /*
+ parse directories and create structure
+ showing which folder to check at which time
+ */
+ slots.clear();
+
+ ofDirectory dir(rootdir);
+
+ dir.allowExt(""); //get directories
+
+ dir.listDir();
+ for(int i = 0; i < dir.size(); i++){
+ string d=dir.getName(i);
+ int start = ofToInt(d.substr(0,4));
+ int end = ofToInt(d.substr(5,4));
+
+ if (end){
+ slots.push_back(timeSlot(dir.getPath(i),start,end));
+ ofLogNotice() << "directory "<<i<<": "<<start<<" - "<<end<<" "<<dir.getPath(i);
+
+ }
+ }
+}
+
+int dirScanner::getSlotForTime(){
+ /*
+ read vector of slots
+ return index of current time
+ naive approach? assuming that the list is valid
+ */
+ int railwaytime=(ofGetHours()*100)+ofGetMinutes();
+
+ for(int i = 0; i < slots.size(); i++){
+ if (slots[i].start<=railwaytime&&slots[i].end>=railwaytime){
+ return i;
+ }
+ }
+ return -1;
+}
+
+void dirPlayer::load(std::string path){
+ items.clear();
+ ofDirectory dir(path);
+ dir.allowExt("mp4");
+ dir.allowExt("mov");
+ dir.allowExt("jpg");
+ dir.allowExt("png");
+ dir.listDir();
+ for(int i = 0; i < dir.size(); i++){
+ string d=dir.getPath(i);
+ playItem item;
+ if (item.load(d)){
+ items.push_back(item);
+ }
+ }
+ currentItem=0;
+ ofLogNotice() << "found "<<items.size()<<" items";
+
+}
+
+void dirPlayer::draw(){
+ int slot=scanner->getSlotForTime();
+ if (slot!=currentslot){
+ if (slot>-1){
+ ofLogNotice() << "entering slot "<<slot<<": "<<scanner->slots[slot].path;
+ load(scanner->slots[slot].path);
+ }
+ else {
+ ofLogNotice() << "leaving slot";
+ }
+ currentslot=slot;
+ }
+ if (items[currentItem].isFinished){
+ items[currentItem].isFinished=false;
+ currentItem=(currentItem+1)%items.size();
+ items[currentItem].play();
+ }
+ items[currentItem].draw();
+
+} \ No newline at end of file