diff options
Diffstat (limited to 'testDir/src/dirscanner.cpp')
| -rw-r--r-- | testDir/src/dirscanner.cpp | 132 |
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 |
