コード例 #1
0
 /**
  * @private
  * 
  * Updates extension and filename mappings from languages based on the current preferences values.
  * 
  * The preferences look like this in a prefs file:
  * 
  * Map *.foo to javascript, *.vm to html
  * 
  *     "language.fileExtensions": {
  *         "foo": "javascript",
  *         "vm": "html"
  *     }
  * 
  * Map "Gemfile" to ruby:
  * 
  *     "language.fileNames": {
  *         "Gemfile": "ruby"
  *     }
  */
 function _updateFromPrefs(pref) {
     var newMapping = PreferencesManager.get(pref),
         newNames = Object.keys(newMapping),
         state = _prefState[pref],
         last = state.last,
         overridden = state.overridden;
     
     // Look for added and changed names (extensions or filenames)
     newNames.forEach(function (name) {
         var language;
         if (newMapping[name] !== last[name]) {
             if (last[name]) {
                 language = getLanguage(last[name]);
                 if (language) {
                     language[state.remove](name);
                     
                     // If this name that was previously mapped was overriding a default
                     // restore it now.
                     _restoreOverriddenDefault(name, state);
                 }
             }
             
             language = exports[state.get](name);
             if (language) {
                 language[state.remove](name);
                 
                 // We're removing a name that was defined in Brackets or an extension,
                 // so keep track of how it used to be mapped.
                 if (!overridden[name]) {
                     overridden[name] = language.getId();
                 }
             }
             language = getLanguage(newMapping[name]);
             if (language) {
                 language[state.add](name);
             }
         }
     });
     
     // Look for removed names (extensions or filenames)
     _.difference(Object.keys(last), newNames).forEach(function (name) {
         var language = getLanguage(last[name]);
         if (language) {
             language[state.remove](name);
             _restoreOverriddenDefault(name, state);
         }
     });
     state.last = newMapping;
 }
コード例 #2
0
        children = children.withMutations(function (children) {

            // Loop through the directory entries
            contents.forEach(function (entry) {
                keysSeen.push(entry.name);

                var match = children.get(entry.name);
                if (match) {
                    // Confirm that a name that used to represent a file and now represents a
                    // directory (or vice versa) isn't what we've encountered here. If we have
                    // hit this situation, pretend the current child of treeData doesn't exist
                    // so we can replace it.
                    var matchIsFile = isFile(match);
                    if (matchIsFile !== entry.isFile) {
                        match = undefined;
                    }
                }

                // We've got a new entry that we need to add.
                if (!match) {
                    if (entry.isFile) {
                        children.set(entry.name, Immutable.Map());
                    } else {
                        children.set(entry.name, Immutable.Map({
                            children: null
                        }));
                    }
                }
            });

            // Look at the list of names that we currently have in the treeData that no longer
            // appear in the directory and delete those.
            var currentEntries = children.keySeq().toJS(),
                deletedEntries = _.difference(currentEntries, keysSeen);

            deletedEntries.forEach(function (name) {
                children.delete(name);
            });
        });
コード例 #3
0
    self.updatePlayerState = function() {
        if (self.state === 'abandoned' || self.state === 'aborting')
            return;

        var current_time = new Date().getTime();
        self.updateAbandonmentState(current_time);
        var present_uberids = self.getPresentUberIds();
        if (self.state === 'empty' && present_uberids.length > 0) {
            self.setState('waiting');
        }

        if (self.state === 'waiting') {
            var missing_uberids = _.difference(_.keys(self.expectedPlayers), self.getPresentUberIds());
            if (missing_uberids.length === 0) {
                self.setState('loading');
            } else {
                var disconnected_players = _.filter(self.expectedPlayers, function(p) { return !p.isPresent(); });
                if (disconnected_players.length > 0) {
                    var playerNearestTimeout = _.min(disconnected_players, function(p) { return p.getTimeoutRemaining(current_time); });
                    var recheckTime = playerNearestTimeout.getTimeoutRemaining(current_time) + 500;
                    debug_log("Setting player state recheck to " + recheckTime + "ms");
                    self.setTimer(self.updatePlayerState, recheckTime);
                } else {
                    // This is a weird state -- we're missing a player, but they're supposedly all here.
                    console.error("Mismatch between server presence and our own: " + missing_uberids + " vs " + disconnected_players);
                    self.setTimer(self.updatePlayerState, 1000);
                }
            }
        } else if (self.state === 'loading') {
            var any_loading = _.some(self.lobbyModel.players, function (value) {
                return !value.spectator && value.loading;
            });

            if (!any_loading) {
                self.setState('countdown');
            }
        }
    };