mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:24:00 +02:00
checkpoint with goto feeds working (but without filtering)
This commit is contained in:
parent
e40fc20cb6
commit
5a1b56d573
3 changed files with 54 additions and 45 deletions
|
@ -16,10 +16,11 @@ import QtQuick 2.5
|
|||
import QtGraphicalEffects 1.0
|
||||
import "toolbars"
|
||||
import "../styles-uit"
|
||||
import "models" as HifiModels
|
||||
|
||||
Column {
|
||||
id: root;
|
||||
visible: false;
|
||||
visible: !!suggestions.count;
|
||||
|
||||
property int cardWidth: 212;
|
||||
property int cardHeight: 152;
|
||||
|
@ -32,18 +33,37 @@ Column {
|
|||
property int stackedCardShadowHeight: 4;
|
||||
property int labelSize: 20;
|
||||
|
||||
property string metaverseServerUrl: '';
|
||||
property string metaverseServerUrl: ''; // FIXME loose this?
|
||||
property string protocol: '';
|
||||
property string actions: 'snapshot';
|
||||
// sendToScript doesn't get wired until after everything gets created. So we have to queue fillDestinations on nextTick.
|
||||
property string labelText: actions;
|
||||
property string filter: '';
|
||||
onFilterChanged: filterChoicesByText();
|
||||
// FIXME onFilterChanged: filterChoicesByText();
|
||||
property var goFunction: null;
|
||||
property var rpc: null;
|
||||
property var http: null;
|
||||
|
||||
HifiConstants { id: hifi }
|
||||
ListModel { id: suggestions; }
|
||||
//FIXME ListModel { id: suggestions; }
|
||||
Component.onCompleted: suggestions.getFirstPage();
|
||||
HifiModels.PSFListModel {
|
||||
id: suggestions;
|
||||
http: root.http;
|
||||
property var options: [
|
||||
'include_actions=' + actions,
|
||||
'restriction=' + (Account.isLoggedIn() ? 'open,hifi' : 'open'),
|
||||
'require_online=true',
|
||||
'protocol=' + Window.protocolSignature()
|
||||
];
|
||||
endpoint: '/api/v1/user_stories?' + options.join('&');
|
||||
itemsPerPage: 3;
|
||||
processPage: function (data) {
|
||||
console.log('FIXME processPage', suggestions.listModelName, JSON.stringify(data));
|
||||
return data.user_stories.map(makeModelData);
|
||||
};
|
||||
listModelName: actions;
|
||||
listView: scroll;
|
||||
}
|
||||
|
||||
function resolveUrl(url) {
|
||||
return (url.indexOf('/') === 0) ? (metaverseServerUrl + url) : url;
|
||||
|
@ -60,11 +80,11 @@ Column {
|
|||
data.details.connections = 4;
|
||||
data.action = 'announcement';
|
||||
}
|
||||
return {
|
||||
var fixme = {
|
||||
place_name: name,
|
||||
username: data.username || "",
|
||||
path: data.path || "",
|
||||
created_at: data.created_at || "",
|
||||
created_at: data.created_at || data.updated_at || "", // FIXME why aren't we getting created_at?
|
||||
action: data.action || "",
|
||||
thumbnail_url: resolveUrl(thumbnail_url),
|
||||
image_url: resolveUrl(data.details && data.details.image_url),
|
||||
|
@ -77,8 +97,11 @@ Column {
|
|||
drillDownToPlace: false,
|
||||
|
||||
searchText: [name].concat(tags, description || []).join(' ').toUpperCase()
|
||||
}
|
||||
};
|
||||
console.log('fixme makeModelData', JSON.stringify(fixme));
|
||||
return fixme;
|
||||
}
|
||||
/* FIXME
|
||||
property var allStories: [];
|
||||
property var placeMap: ({}); // Used for making stacks.
|
||||
property int requestId: 0;
|
||||
|
@ -108,7 +131,7 @@ Column {
|
|||
];
|
||||
var url = metaverseBase + 'user_stories?' + options.join('&');
|
||||
var thisRequestId = ++requestId;
|
||||
rpc('request', url, function (error, data) {
|
||||
http.request(url, function (error, data) {
|
||||
if (thisRequestId !== requestId) {
|
||||
error = 'stale';
|
||||
}
|
||||
|
@ -126,8 +149,9 @@ Column {
|
|||
});
|
||||
}
|
||||
function fillDestinations() { // Public
|
||||
console.debug('Feed::fillDestinations()')
|
||||
|
||||
console.debug('Feed::fillDestinations()');
|
||||
//suggestions.getFirstPage();
|
||||
}
|
||||
function report(label, error) {
|
||||
console.log(label, actions, error || 'ok', allStories.length, 'filtered to', suggestions.count);
|
||||
}
|
||||
|
@ -193,6 +217,7 @@ Column {
|
|||
allStories.forEach(makeFilteredStoryProcessor());
|
||||
root.visible = !!suggestions.count;
|
||||
}
|
||||
*/
|
||||
|
||||
RalewayBold {
|
||||
id: label;
|
||||
|
@ -202,12 +227,13 @@ Column {
|
|||
}
|
||||
ListView {
|
||||
id: scroll;
|
||||
model: suggestions;
|
||||
model: suggestions.model;
|
||||
orientation: ListView.Horizontal;
|
||||
highlightFollowsCurrentItem: false
|
||||
highlightMoveDuration: -1;
|
||||
highlightMoveVelocity: -1;
|
||||
currentIndex: -1;
|
||||
onAtXEndChanged: { console.log('FIXME onAtXEndChanged', actions, scroll.atXEnd, scroll.atXBeginning); if (scroll.atXEnd && !scroll.atXBeginning) { suggestions.getNextPage(); } }
|
||||
|
||||
spacing: 12;
|
||||
width: parent.width;
|
||||
|
@ -239,6 +265,7 @@ Column {
|
|||
unhoverThunk: function () { hovered = false }
|
||||
}
|
||||
}
|
||||
/* WTF is this?
|
||||
NumberAnimation {
|
||||
id: anim;
|
||||
target: scroll;
|
||||
|
@ -256,4 +283,5 @@ Column {
|
|||
scroll.currentIndex = index;
|
||||
anim.running = true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ Item {
|
|||
property bool delayedClear: false;
|
||||
function resetModel() {
|
||||
if (!delayedClear) { finalModel.clear(); }
|
||||
currentPageToRetrieve = 1;
|
||||
currentPageToRetrieve = 1; console.log('fixme resetModel set currentPageToRetrieve to 1', listModelName);
|
||||
retrievedAtLeastOnePage = false;
|
||||
copyOfItems = [];
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ Item {
|
|||
console.debug('handlePage', listModelName, error, JSON.stringify(response));
|
||||
function fail(message) {
|
||||
console.warn("Warning", listModelName, JSON.stringify(message));
|
||||
console.log('FIXME fail setting currentPageToRetrieve to -1', listModelName);
|
||||
currentPageToRetrieve = -1;
|
||||
requestPending = false;
|
||||
delayedClear = false;
|
||||
|
@ -96,6 +97,7 @@ Item {
|
|||
}
|
||||
processed = processPage(response.data || response);
|
||||
if (response.total_pages && (response.total_pages === currentPageToRetrieve)) {
|
||||
console.log('fixme hanglePage set currentPageToRetrieve to -1', listModelName, 'response.total_pages:', response.total_pages, 'old currentPageToRetrieve:', currentPageToRetrieve);
|
||||
currentPageToRetrieve = -1;
|
||||
}
|
||||
if (searchItemTest) {
|
||||
|
@ -122,6 +124,7 @@ Item {
|
|||
if (searchItemTest && searchFilter && listView && listView.atYEnd && (currentPageToRetrieve >= 0)) {
|
||||
getNextPage(); // too fancy??
|
||||
}
|
||||
if (listView) { console.debug('handlePage completed', listModelName, 'model:', model.count, 'view:', listView.count); }
|
||||
}
|
||||
function applySearchItemTest(items) {
|
||||
return items.filter(function (item) {
|
||||
|
@ -140,6 +143,7 @@ Item {
|
|||
property var http; // An Item that has a request function.
|
||||
property var getPage: function () { // Any override MUST call handlePage(), above, even if results empty.
|
||||
if (!http) { return console.warn("Neither http nor getPage was set for", listModelName); }
|
||||
// If it is a path starting with slash, add the metaverseServer domain.
|
||||
var url = /^\//.test(endpoint) ? (Account.metaverseServerURL + endpoint) : endpoint;
|
||||
var parameters = [
|
||||
// FIXME: handle sort, search, tag parameters
|
||||
|
@ -171,6 +175,7 @@ Item {
|
|||
// onAtYEndChanged: if (theList.atYEnd) { thisPSFListModelId.getNextPage(); }
|
||||
// ...}
|
||||
property var getNextPage: function () {
|
||||
console.log('fixme getNextPage', listModelName, requestPending, currentPageToRetrieve);
|
||||
if (requestPending || currentPageToRetrieve < 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -37,38 +37,14 @@ StackView {
|
|||
property string metaverseBase: addressBarDialog.metaverseServerUrl + "/api/v1/";
|
||||
property var tablet: null;
|
||||
|
||||
// This version only implements rpc(method, parameters, callback(error, result)) calls initiated from here, not initiated from .js, nor "notifications".
|
||||
property var rpcCalls: ({});
|
||||
property var rpcCounter: 0;
|
||||
RootHttpRequest { id: http; }
|
||||
signal sendToScript(var message);
|
||||
function rpc(method, parameters, callback) {
|
||||
console.debug('TabletAddressDialog: rpc: method = ', method, 'parameters = ', parameters, 'callback = ', callback)
|
||||
|
||||
rpcCalls[rpcCounter] = callback;
|
||||
var message = {method: method, params: parameters, id: rpcCounter++, jsonrpc: "2.0"};
|
||||
sendToScript(message);
|
||||
}
|
||||
function fromScript(message) {
|
||||
if (message.method === 'refreshFeeds') {
|
||||
var feeds = [happeningNow, places, snapshots];
|
||||
console.debug('TabletAddressDialog::fromScript: refreshFeeds', 'feeds = ', feeds);
|
||||
|
||||
feeds.forEach(function(feed) {
|
||||
feed.protocol = encodeURIComponent(message.protocolSignature);
|
||||
Qt.callLater(feed.fillDestinations);
|
||||
});
|
||||
|
||||
return;
|
||||
switch (message.method) {
|
||||
case 'http.response':
|
||||
http.handleHttpResponse(message);
|
||||
break;
|
||||
}
|
||||
|
||||
var callback = rpcCalls[message.id];
|
||||
if (!callback) {
|
||||
// FIXME: We often recieve very long messages here, the logging of which is drastically slowing down the main thread
|
||||
//console.log('No callback for message fromScript', JSON.stringify(message));
|
||||
return;
|
||||
}
|
||||
delete rpcCalls[message.id];
|
||||
callback(message.error, message.result);
|
||||
}
|
||||
|
||||
Component { id: tabletWebView; TabletWebView {} }
|
||||
|
@ -351,7 +327,7 @@ StackView {
|
|||
actions: 'announcement';
|
||||
filter: addressLine.text;
|
||||
goFunction: goCard;
|
||||
rpc: root.rpc;
|
||||
http: http;
|
||||
}
|
||||
Feed {
|
||||
id: places;
|
||||
|
@ -364,7 +340,7 @@ StackView {
|
|||
actions: 'concurrency';
|
||||
filter: addressLine.text;
|
||||
goFunction: goCard;
|
||||
rpc: root.rpc;
|
||||
http: http;
|
||||
}
|
||||
Feed {
|
||||
id: snapshots;
|
||||
|
@ -378,7 +354,7 @@ StackView {
|
|||
actions: 'snapshot';
|
||||
filter: addressLine.text;
|
||||
goFunction: goCard;
|
||||
rpc: root.rpc;
|
||||
http: http;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue