tuned-city
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

path.js
application/javascript

Download raw (5.0 KB)

/*
 * GET media.
 */

var Media = require('../models').Media;
var Path = require('../models').Path;
var Connection = require('../models').Connection;
var Cursor = require('../models').Cursor;
var _ = require('underscore');

exports.path = function(req, res){
    var forwardTrackoints = function(trackpoints, response, ret){
        Connection.find({'_id':{$in:trackpoints}}, function(err, connections){
            if(err){
                // console.warn(err);
            }
            else{
                ret.trackpoints = [];
                var cursors = [];
                for(var c in connections){
                    var connection = connections[c].toObject();
                    
                    cursors.push(connection.start);
                    cursors.push(connection.end);
                    
                    ret.trackpoints.push(connection);
                }
                Cursor.find({'_id':{$in:cursors}}, function(err, cursors){
                    if(err){
                        // console.warn(err);
                    }
                    else{
                        var ms = [];
                        _.reduce(cursors, function(memo, value, index, list){
                            var cursor = value.toObject();
                            for(var t in memo)
                            {
                                if( !memo[t].start._id
                                    && memo[t].start.toString() === cursor._id.toString())
                                {
                                    memo[t].start = cursor;
                                }
                                if( !memo[t].end._id
                                    && memo[t].end.toString() === cursor._id.toString())
                                {
                                     memo[t].end = cursor;
                                }
                                if(!(cursor.media in ms))
                                    ms.push(cursor.media);
                            }
                            return memo;
                        }, ret.trackpoints);
                        Media.find({'_id':{$in:ms}},function(err, medias){
                            if(err){
                                // console.warn(err);
                            }
                            else
                            {
                                _.reduce(medias, function(memo, value){
                                    var media = value.toObject();
                                    for(var t in memo)
                                    {
                                        if(memo[t].start.media.toString() === media._id.toString())
                                        {
                                            memo[t].start.media = media;
                                        }
                                        if(memo[t].end.media.toString() === media._id.toString())
                                        {
                                            memo[t].end.media = media;
                                        }
                                    }
                                    return memo;
                                }, ret.trackpoints);
                                
                                res.render('path_detail', {path: ret});
                            }
                        });
                    }
                });
            }
        });
    };
    
    

    if ('path' in req.params && req.params['path'] != undefined) {
        // A path id was specified, so we search for it in order to pass it the template

        Path 
        .findById(req.params['path'])
        .exec(function (err, path) {
            if (err) res.status(500).send(err);
            else{
                try{
                    var p = path.toObject();
                    forwardTrackoints(_.clone(p.trackpoints), res, p );
                }
                catch(e){
                    console.log(e);
                }
            }

        });
    } else {
        //  No path id was specified, so we pass all the paths to the template context.
        Path.find({}, function(err, ps) {
            if (err) {
                // console.log('Error: ' + err);
            }
            else {
                text = {};
                
                var getText = function(idx){
                    if(idx == ps.length)
                    {
                        return res.render('path_list', {
                            path_list: ps,
                            text: text
                        });
                    }
                    var P = ps[idx];
                    Connection.find({'_id':{$in:P.trackpoints}}, function(err, connections){
                        text[P._id] = [];
                        _.each(connections, function(con, i){
                            text[P._id].push(con.annotation);
                        });
                        getText(idx + 1);
                    });
                };
                
                getText(0);
            };
        });
    };
};