Move ai-stack and paintplus vendored source under vendor/
Matches the existing vendor/easy-asterisk convention (used by services/asterisk.sh) instead of two one-off top-level directories that cluttered the repo root and didn't look like anything else next to setup.sh, lib/, services/, extras/. Only the two services' own SRC_DIR path resolution and header comments needed updating — nothing else in the repo referenced the old ./ai-stack / ./paintplus paths. Also documents vendor/ in README.md's Layout section.
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
import app from './../app.js';
|
||||
import config from './../config.js';
|
||||
import Helper_class from './../libs/helpers.js';
|
||||
import alertify from './../../../node_modules/alertifyjs/build/alertify.min.js';
|
||||
import image_store from './store/image-store.js';
|
||||
import { Base_action } from './base.js';
|
||||
|
||||
const Helper = new Helper_class();
|
||||
|
||||
export class Update_layer_image_action extends Base_action {
|
||||
/**
|
||||
* updates layer image data
|
||||
*
|
||||
* @param {canvas} canvas
|
||||
* @param {int} layer_id (optional)
|
||||
*/
|
||||
constructor(canvas, layer_id) {
|
||||
super('update_layer_image', 'Update Layer Image');
|
||||
this.canvas = canvas;
|
||||
if (layer_id == null)
|
||||
layer_id = config.layer.id;
|
||||
this.layer_id = parseInt(layer_id);
|
||||
this.reference_layer = null;
|
||||
this.old_image_id = null;
|
||||
this.new_image_id = null;
|
||||
this.old_link_database_id = null;
|
||||
}
|
||||
|
||||
async do() {
|
||||
super.do();
|
||||
this.reference_layer = app.Layers.get_layer(this.layer_id);
|
||||
if (!this.reference_layer) {
|
||||
throw new Error('Aborted - layer with specified id doesn\'t exist');
|
||||
}
|
||||
if (this.reference_layer.type != 'image'){
|
||||
alertify.error('Error: layer must be image.');
|
||||
throw new Error('Aborted - layer is not an image');
|
||||
}
|
||||
|
||||
// Get data url representation of image
|
||||
let canvas_data_url;
|
||||
if (this.new_image_id) {
|
||||
try {
|
||||
canvas_data_url = await image_store.get(this.new_image_id);
|
||||
} catch (error) {
|
||||
throw new Error('Aborted - problem retrieving cached image from database');
|
||||
}
|
||||
} else if (this.canvas) {
|
||||
if (Helper.is_edge_or_ie() == false && typeof(FileReader) !== 'undefined') {
|
||||
// Update image using blob and FileReader (async)
|
||||
await new Promise((resolve) => {
|
||||
this.canvas.toBlob((blob) => {
|
||||
var reader = new FileReader();
|
||||
reader.onloadend = () => {
|
||||
canvas_data_url = reader.result;
|
||||
resolve();
|
||||
}
|
||||
reader.readAsDataURL(blob);
|
||||
}, 'image/png');
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Slow way for IE, Edge
|
||||
canvas_data_url = this.canvas.toDataURL();
|
||||
}
|
||||
}
|
||||
|
||||
// Store data url in database
|
||||
try {
|
||||
if (!this.old_image_id) {
|
||||
if (this.reference_layer._link_database_id) {
|
||||
this.old_image_id = this.reference_layer._link_database_id;
|
||||
} else {
|
||||
this.old_image_id = await image_store.add(this.reference_layer.link.src);
|
||||
}
|
||||
}
|
||||
if (!this.new_image_id) {
|
||||
this.new_image_id = await image_store.add(canvas_data_url);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
requestAnimationFrame(() => {
|
||||
app.State.free(0, this.database_estimate || 1)
|
||||
});
|
||||
}
|
||||
|
||||
// Estimate storage size
|
||||
try {
|
||||
this.database_estimate = new Blob([await image_store.get(this.old_image_id)]).size;
|
||||
} catch (e) {}
|
||||
|
||||
// Assign layer properties
|
||||
this.reference_layer.link.src = canvas_data_url;
|
||||
this.old_link_database_id = this.reference_layer._link_database_id;
|
||||
this.reference_layer._link_database_id = this.new_image_id;
|
||||
|
||||
this.canvas = null;
|
||||
config.need_render = true;
|
||||
}
|
||||
|
||||
async undo() {
|
||||
super.undo();
|
||||
|
||||
// Estimate storage size
|
||||
try {
|
||||
this.database_estimate = new Blob([this.reference_layer.link.src]).size;
|
||||
} catch (e) {}
|
||||
|
||||
// Restore old image
|
||||
if (this.old_image_id != null) {
|
||||
try {
|
||||
this.reference_layer.link.src = await image_store.get(this.old_image_id);
|
||||
} catch (error) {
|
||||
throw new Error('Failed to retrieve image from store');
|
||||
}
|
||||
}
|
||||
this.reference_layer._link_database_id = this.old_link_database_id;
|
||||
this.reference_layer = null;
|
||||
config.need_render = true;
|
||||
}
|
||||
|
||||
async free() {
|
||||
let has_error = false;
|
||||
if (this.new_image_id != null) {
|
||||
try {
|
||||
await image_store.delete(this.new_image_id);
|
||||
} catch (error) {
|
||||
has_error = true;
|
||||
}
|
||||
this.new_image_id = null;
|
||||
}
|
||||
if (this.is_done || !this.old_link_database_id) {
|
||||
if (this.old_image_id != null) {
|
||||
try {
|
||||
await image_store.delete(this.old_image_id);
|
||||
} catch (error) {
|
||||
has_error = true;
|
||||
}
|
||||
this.old_image_id = null;
|
||||
}
|
||||
}
|
||||
this.canvas = null;
|
||||
this.old_link_database_id = null;
|
||||
this.reference_layer = null;
|
||||
if (has_error) {
|
||||
alertify.error('A problem occurred while removing undo history. It\'s suggested you save your work and refresh the page in order to free up memory.');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user