Default prolink installation
This commit is contained in:
@@ -299,14 +299,14 @@ angular.module('app.frontend')
|
|||||||
console.log("AuthManager received resolved UserPreferences", resolvedSingleton);
|
console.log("AuthManager received resolved UserPreferences", resolvedSingleton);
|
||||||
this.userPreferences = resolvedSingleton;
|
this.userPreferences = resolvedSingleton;
|
||||||
this.userPreferencesDidChange();
|
this.userPreferencesDidChange();
|
||||||
}, () => {
|
}, (valueCallback) => {
|
||||||
// Safe to create. Create and return object.
|
// Safe to create. Create and return object.
|
||||||
var prefs = new Item({content_type: prefsContentType});
|
var prefs = new Item({content_type: prefsContentType});
|
||||||
modelManager.addItem(prefs);
|
modelManager.addItem(prefs);
|
||||||
prefs.setDirty(true);
|
prefs.setDirty(true);
|
||||||
console.log("Created new prefs", prefs);
|
console.log("Created new prefs", prefs);
|
||||||
$rootScope.sync();
|
$rootScope.sync();
|
||||||
return prefs;
|
valueCallback(prefs);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.userPreferencesDidChange = function() {
|
this.userPreferencesDidChange = function() {
|
||||||
|
|||||||
@@ -7,16 +7,14 @@ class RoomBar {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
controller($rootScope, $scope, desktopManager, syncManager, modelManager, componentManager, $timeout) {
|
controller($rootScope, $scope, desktopManager, syncManager, modelManager, componentManager, $timeout, singletonManager, packageManager) {
|
||||||
'ngInject';
|
'ngInject';
|
||||||
|
|
||||||
$scope.componentManager = componentManager;
|
$scope.componentManager = componentManager;
|
||||||
$scope.rooms = [];
|
$scope.rooms = [];
|
||||||
|
|
||||||
modelManager.addItemSyncObserver("room-bar", "SN|Component", (allItems, validItems, deletedItems, source) => {
|
modelManager.addItemSyncObserver("room-bar", "SN|Component", (allItems, validItems, deletedItems, source) => {
|
||||||
$scope.rooms = _.uniq($scope.rooms
|
$scope.rooms = _.uniq($scope.rooms.concat(allItems.filter((candidate) => {return candidate.area == "rooms"})))
|
||||||
.concat(allItems
|
|
||||||
.filter((candidate) => {return candidate.area == "rooms"})))
|
|
||||||
.filter((candidate) => {return !candidate.deleted});
|
.filter((candidate) => {return !candidate.deleted});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -55,6 +53,18 @@ class RoomBar {
|
|||||||
room.show = false;
|
room.show = false;
|
||||||
this.componentManager.deactivateComponent(room);
|
this.componentManager.deactivateComponent(room);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle singleton ProLink instance
|
||||||
|
singletonManager.registerSingleton({content_type: "SN|Component", package_info: {identifier: "org.standardnotes.prolink"}}, (resolvedSingleton) => {
|
||||||
|
console.log("Roombar received resolved ProLink", resolvedSingleton);
|
||||||
|
}, (valueCallback) => {
|
||||||
|
console.log("Creating prolink");
|
||||||
|
// Safe to create. Create and return object.
|
||||||
|
let url = window._prolink_package_url;
|
||||||
|
packageManager.installPackage(url, (component) => {
|
||||||
|
valueCallback(component);
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class ModelManager {
|
|||||||
constructor(storageManager) {
|
constructor(storageManager) {
|
||||||
ModelManager.MappingSourceRemoteRetrieved = "MappingSourceRemoteRetrieved";
|
ModelManager.MappingSourceRemoteRetrieved = "MappingSourceRemoteRetrieved";
|
||||||
ModelManager.MappingSourceRemoteSaved = "MappingSourceRemoteSaved";
|
ModelManager.MappingSourceRemoteSaved = "MappingSourceRemoteSaved";
|
||||||
|
ModelManager.MappingSourceLocalSaved = "MappingSourceLocalSaved";
|
||||||
ModelManager.MappingSourceLocalRetrieved = "MappingSourceLocalRetrieved";
|
ModelManager.MappingSourceLocalRetrieved = "MappingSourceLocalRetrieved";
|
||||||
ModelManager.MappingSourceComponentRetrieved = "MappingSourceComponentRetrieved";
|
ModelManager.MappingSourceComponentRetrieved = "MappingSourceComponentRetrieved";
|
||||||
ModelManager.MappingSourceRemoteActionRetrieved = "MappingSourceRemoteActionRetrieved"; /* aciton-based Extensions like note history */
|
ModelManager.MappingSourceRemoteActionRetrieved = "MappingSourceRemoteActionRetrieved"; /* aciton-based Extensions like note history */
|
||||||
@@ -103,6 +104,10 @@ class ModelManager {
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
didSyncModelsOffline(items) {
|
||||||
|
this.notifySyncObserversOfModels(items, ModelManager.MappingSourceLocalSaved);
|
||||||
|
}
|
||||||
|
|
||||||
mapResponseItemsToLocalModels(items, source) {
|
mapResponseItemsToLocalModels(items, source) {
|
||||||
return this.mapResponseItemsToLocalModelsOmittingFields(items, null, source);
|
return this.mapResponseItemsToLocalModelsOmittingFields(items, null, source);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class SingletonManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resolveSingletons(retrievedItems, initialLoad) {
|
resolveSingletons(retrievedItems, initialLoad) {
|
||||||
for(var singletonHandler of this.singletonHandlers) {
|
for(let singletonHandler of this.singletonHandlers) {
|
||||||
var predicate = singletonHandler.predicate;
|
var predicate = singletonHandler.predicate;
|
||||||
var singletonItems = this.filterItemsWithPredicate(retrievedItems, predicate);
|
var singletonItems = this.filterItemsWithPredicate(retrievedItems, predicate);
|
||||||
if(singletonItems.length > 0) {
|
if(singletonItems.length > 0) {
|
||||||
@@ -63,7 +63,7 @@ class SingletonManager {
|
|||||||
*/
|
*/
|
||||||
if(allExtantItemsMatchingPredicate.length >= 2) {
|
if(allExtantItemsMatchingPredicate.length >= 2) {
|
||||||
var toDelete = [];
|
var toDelete = [];
|
||||||
for(var extantItem of allExtantItemsMatchingPredicate) {
|
for(let extantItem of allExtantItemsMatchingPredicate) {
|
||||||
if(!singletonItems.includes(extantItem)) {
|
if(!singletonItems.includes(extantItem)) {
|
||||||
// Delete it
|
// Delete it
|
||||||
toDelete.push(extantItem);
|
toDelete.push(extantItem);
|
||||||
@@ -102,10 +102,13 @@ class SingletonManager {
|
|||||||
// Retrieved items does not include any items of interest. If we don't have a singleton registered to this handler,
|
// Retrieved items does not include any items of interest. If we don't have a singleton registered to this handler,
|
||||||
// we need to create one. Only do this on actual sync completetions and not on initial data load. Because we want
|
// we need to create one. Only do this on actual sync completetions and not on initial data load. Because we want
|
||||||
// to get the latest from the server before making the decision to create a new item
|
// to get the latest from the server before making the decision to create a new item
|
||||||
if(!singletonHandler.singleton && !initialLoad) {
|
if(!singletonHandler.singleton && !initialLoad && !singletonHandler.pendingCreateBlockCallback) {
|
||||||
var item = singletonHandler.createBlock();
|
singletonHandler.pendingCreateBlockCallback = true;
|
||||||
singletonHandler.singleton = item;
|
singletonHandler.createBlock((created) => {
|
||||||
singletonHandler.resolutionCallback(item);
|
singletonHandler.singleton = created;
|
||||||
|
singletonHandler.pendingCreateBlockCallback = false;
|
||||||
|
singletonHandler.resolutionCallback(created);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,13 +116,25 @@ class SingletonManager {
|
|||||||
|
|
||||||
filterItemsWithPredicate(items, predicate) {
|
filterItemsWithPredicate(items, predicate) {
|
||||||
return items.filter((candidate) => {
|
return items.filter((candidate) => {
|
||||||
for(var key in predicate) {
|
return this.itemSatisfiesPredicate(candidate, predicate);
|
||||||
if(candidate[key] != predicate[key]) {
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
itemSatisfiesPredicate(candidate, predicate) {
|
||||||
|
for(var key in predicate) {
|
||||||
|
var predicateValue = predicate[key];
|
||||||
|
var candidateValue = candidate[key];
|
||||||
|
if(typeof predicateValue == 'object') {
|
||||||
|
// Check nested properties
|
||||||
|
if(!this.itemSatisfiesPredicate(candidateValue, predicateValue)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
else if(candidateValue != predicateValue) {
|
||||||
})
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,9 @@ class SyncManager {
|
|||||||
|
|
||||||
this.$rootScope.$broadcast("sync:completed", {});
|
this.$rootScope.$broadcast("sync:completed", {});
|
||||||
|
|
||||||
|
// Required in order for modelManager to notify sync observers
|
||||||
|
this.modelManager.didSyncModelsOffline(items);
|
||||||
|
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback({success: true});
|
callback({success: true});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
window._default_sf_server = "<%= ENV['SF_DEFAULT_SERVER'] %>";
|
window._default_sf_server = "<%= ENV['SF_DEFAULT_SERVER'] %>";
|
||||||
|
window._prolink_package_url = "<%= ENV['PROLINK_URL'] %>";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<% if Rails.env.development? %>
|
<% if Rails.env.development? %>
|
||||||
|
|||||||
Reference in New Issue
Block a user