##// END OF EJS Templates
http-proto: in case incoming requests come in as chunked stream the data to VCSServer....
http-proto: in case incoming requests come in as chunked stream the data to VCSServer. This should solve a problem of uploading large files to rhodecode. In case of git with small postBuffers GIT client streams data to the server. In such case we want to stream the data back again to vcsserver without reading it fully inside RhodeCode.

File last commit:

r983:c5d592d8 default
r1423:8b2e03e1 default
Show More
rhodecode-app.js
137 lines | 5.7 KiB | application/javascript | JavascriptLexer
frontend: introduce rhodecode-app for more complex cross element wiring
r787 ccLog = Logger.get('RhodeCodeApp');
ccLog.setLevel(Logger.OFF);
var rhodeCodeApp = Polymer({
is: 'rhodecode-app',
notifications: move all notifications into polymer for consistency fix #4201
r822 attached: function () {
frontend: introduce rhodecode-app for more complex cross element wiring
r787 ccLog.debug('rhodeCodeApp created');
$.Topic('/notifications').subscribe(this.handleNotifications.bind(this));
favicon: added favicon notifications
r882 $.Topic('/favicon/update').subscribe(this.faviconUpdate.bind(this));
frontend: ensure polyfills are loaded as early as possible
r880 $.Topic('/connection_controller/subscribe').subscribe(
this.subscribeToChannelTopic.bind(this));
// this event can be used to coordinate plugins to do their
// initialization before channelstream is kicked off
$.Topic('/__MAIN_APP__').publish({});
frontend: introduce rhodecode-app for more complex cross element wiring
r787
notifications: move all notifications into polymer for consistency fix #4201
r822 for (var i = 0; i < alertMessagePayloads.length; i++) {
$.Topic('/notifications').publish(alertMessagePayloads[i]);
}
topics: remove dependency on __REGISTER__ so we avoid race condition
r838 this.kickoffChannelstreamPlugin();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 },
/** proxy to channelstream connection */
getChannelStreamConnection: function () {
return this.$['channelstream-connection'];
},
handleNotifications: function (data) {
this.$['notifications'].handleNotification(data);
},
favicon: added favicon notifications
r882 faviconUpdate: function (data) {
this.$$('rhodecode-favicon').counter = data.count;
},
frontend: introduce rhodecode-app for more complex cross element wiring
r787 /** opens connection to ws server */
kickoffChannelstreamPlugin: function (data) {
ccLog.debug('kickoffChannelstreamPlugin');
var channels = ['broadcast'];
var addChannels = this.checkViewChannels();
for (var i = 0; i < addChannels.length; i++) {
channels.push(addChannels[i]);
}
channelstream: connect only when enabled
r798 if (window.CHANNELSTREAM_SETTINGS && CHANNELSTREAM_SETTINGS.enabled){
frontend: ensure polyfills are loaded as early as possible
r880 var channelstreamConnection = this.getChannelStreamConnection();
channelstream: connect only when enabled
r798 channelstreamConnection.connectUrl = CHANNELSTREAM_URLS.connect;
channelstreamConnection.subscribeUrl = CHANNELSTREAM_URLS.subscribe;
channelstreamConnection.websocketUrl = CHANNELSTREAM_URLS.ws + '/ws';
channelstreamConnection.longPollUrl = CHANNELSTREAM_URLS.longpoll + '/listen';
// some channels might already be registered by topic
for (var i = 0; i < channels.length; i++) {
channelstreamConnection.push('channels', channels[i]);
}
// append any additional channels registered in other plugins
$.Topic('/connection_controller/subscribe').processPrepared();
channelstreamConnection.connect();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 }
},
checkViewChannels: function () {
var channels = []
// subscribe to PR repo channel for PR's'
if (templateContext.pull_request_data.pull_request_id) {
var channelName = '/repo$' + templateContext.repo_name + '$/pr/' +
String(templateContext.pull_request_data.pull_request_id);
channels.push(channelName);
}
return channels;
},
/** subscribes users from channels in channelstream */
subscribeToChannelTopic: function (channels) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var toSubscribe = channelstreamConnection.calculateSubscribe(channels);
ccLog.debug('subscribeToChannelTopic', toSubscribe);
if (toSubscribe.length > 0) {
// if we are connected then subscribe
if (channelstreamConnection.connected) {
channelstreamConnection.subscribe(toSubscribe);
}
// not connected? just push channels onto the stack
else {
for (var i = 0; i < toSubscribe.length; i++) {
channelstreamConnection.push('channels', toSubscribe[i]);
}
}
}
},
/** publish received messages into correct topic */
receivedMessage: function (event) {
for (var i = 0; i < event.detail.length; i++) {
var message = event.detail[i];
if (message.message.topic) {
ccLog.debug('publishing', message.message.topic);
$.Topic(message.message.topic).publish(message);
}
else if (message.type === 'presence'){
$.Topic('/connection_controller/presence').publish(message);
}
else {
ccLog.warn('unhandled message', message);
}
}
},
handleConnected: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 channelstreamConnection.set('channelsState',
event.detail.channels_info);
channelstreamConnection.set('userState', event.detail.state);
channelstreamConnection.set('channels', event.detail.channels);
this.propagageChannelsState();
},
handleSubscribed: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var channelInfo = event.detail.channels_info;
var channelKeys = Object.keys(event.detail.channels_info);
for (var i = 0; i < channelKeys.length; i++) {
var key = channelKeys[i];
channelstreamConnection.set(['channelsState', key], channelInfo[key]);
}
channelstreamConnection.set('channels', event.detail.channels);
this.propagageChannelsState();
},
/** propagates channel states on topics */
propagageChannelsState: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var channel_data = channelstreamConnection.channelsState;
var channels = channelstreamConnection.channels;
for (var i = 0; i < channels.length; i++) {
var key = channels[i];
$.Topic('/connection_controller/channel_update').publish(
{channel: key, state: channel_data[key]}
);
}
}
});