mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
Compare commits
11 Commits
v0.7.31-be
...
v0.7.31-be
Author | SHA1 | Date | |
---|---|---|---|
8003d3eb1e | |||
48cfa67889 | |||
9cda38e9d1 | |||
72f8d4249f | |||
0f93d70417 | |||
580bef76ba | |||
7595e89223 | |||
7af44d4a2c | |||
0479e5307c | |||
d03c1b90ce | |||
d34e56a517 |
24
CHANGELOG.md
24
CHANGELOG.md
@@ -2,6 +2,30 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.7.31-beta.5](https://github.com/antares-sql/antares/compare/v0.7.31-beta.4...v0.7.31-beta.5) (2025-02-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **devtoolsInstaller:** improve file path handling and increase chromium version ([7595e89](https://github.com/antares-sql/antares/commit/7595e892238d2a93c454e9c1f236915fb458eed1))
|
||||
* improve BLOB primary fields management, fixes [#938](https://github.com/antares-sql/antares/issues/938) ([72f8d42](https://github.com/antares-sql/antares/commit/72f8d4249f7f587d3e92b46cf7709ddab42107d4))
|
||||
* **Linux:** restored AppImage auto updates ([0479e53](https://github.com/antares-sql/antares/commit/0479e5307c9a9d5f791e1c61fa772d331f6f7f1f))
|
||||
* replace 'this.addNotification' with 'addNotification' in useResultTables.ts ([580bef7](https://github.com/antares-sql/antares/commit/580bef76ba390fc85df0892265f31392b80301bd))
|
||||
* unable to delete rows from context menu ([0f93d70](https://github.com/antares-sql/antares/commit/0f93d70417871f02f9f64f203f6654fa1bf2004b))
|
||||
|
||||
|
||||
### Improvements
|
||||
|
||||
* improve button styles of notes ([48cfa67](https://github.com/antares-sql/antares/commit/48cfa67889bd83228c109b7966c4acea4e542fc6))
|
||||
* **MySQL:** long loading in table settings when no checks present ([9cda38e](https://github.com/antares-sql/antares/commit/9cda38e9d10e3000473863560d8be8f426a5ed17))
|
||||
|
||||
### [0.7.31-beta.4](https://github.com/antares-sql/antares/compare/v0.7.31-beta.3...v0.7.31-beta.4) (2025-01-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Linux:** missing window management icons ([d34e56a](https://github.com/antares-sql/antares/commit/d34e56a517784dea16a7a53bc2249072a3b96596))
|
||||
|
||||
### [0.7.31-beta.3](https://github.com/antares-sql/antares/compare/v0.7.31-beta.2...v0.7.31-beta.3) (2025-01-31)
|
||||
|
||||
|
||||
|
16
package-lock.json
generated
16
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"version": "0.7.31-beta.3",
|
||||
"version": "0.7.31-beta.5",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "antares",
|
||||
"version": "0.7.31-beta.3",
|
||||
"version": "0.7.31-beta.5",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -22,6 +22,7 @@
|
||||
"babel-loader": "~8.2.3",
|
||||
"better-sqlite3": "~10.0.0",
|
||||
"chalk": "~4.1.2",
|
||||
"ciaplu": "^2.2.0",
|
||||
"cpu-features": "^0.0.10",
|
||||
"cross-env": "~7.0.2",
|
||||
"css-loader": "~6.5.0",
|
||||
@@ -5608,6 +5609,12 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/ciaplu": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ciaplu/-/ciaplu-2.2.0.tgz",
|
||||
"integrity": "sha512-7y8s0GMFpIKqX2kwiOEYbaX3P9tPIbX4x41uw8GZjkZ+y0QZrpY3PFjE2Ed6BOeFxcCWi7b85MYHeiRrVrlSOQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/clean-css": {
|
||||
"version": "5.3.2",
|
||||
"license": "MIT",
|
||||
@@ -20345,6 +20352,11 @@
|
||||
"version": "3.9.0",
|
||||
"dev": true
|
||||
},
|
||||
"ciaplu": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ciaplu/-/ciaplu-2.2.0.tgz",
|
||||
"integrity": "sha512-7y8s0GMFpIKqX2kwiOEYbaX3P9tPIbX4x41uw8GZjkZ+y0QZrpY3PFjE2Ed6BOeFxcCWi7b85MYHeiRrVrlSOQ=="
|
||||
},
|
||||
"clean-css": {
|
||||
"version": "5.3.2",
|
||||
"requires": {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "antares",
|
||||
"productName": "Antares",
|
||||
"version": "0.7.31-beta.3",
|
||||
"version": "0.7.31-beta.5",
|
||||
"description": "A modern, fast and productivity driven SQL client with a focus in UX.",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/antares-sql/antares.git",
|
||||
@@ -131,6 +131,7 @@
|
||||
"babel-loader": "~8.2.3",
|
||||
"better-sqlite3": "~10.0.0",
|
||||
"chalk": "~4.1.2",
|
||||
"ciaplu": "^2.2.0",
|
||||
"cpu-features": "^0.0.10",
|
||||
"cross-env": "~7.0.2",
|
||||
"css-loader": "~6.5.0",
|
||||
|
@@ -1,5 +1,5 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
// @ts-check
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const https = require('https');
|
||||
@@ -7,13 +7,18 @@ const unzip = require('unzip-crx-3');
|
||||
const { antares } = require('../package.json');
|
||||
|
||||
const extensionID = antares.devtoolsId;
|
||||
const chromiumVersion = '124';
|
||||
const destFolder = path.resolve(__dirname, `../misc/${extensionID}`);
|
||||
const filePath = path.resolve(__dirname, `${destFolder}${extensionID}.crx`);
|
||||
const fileUrl = `https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&x=id%3D${extensionID}%26uc&prodversion=32`;
|
||||
const filePath = path.resolve(__dirname, `${destFolder}/${extensionID}.crx`);
|
||||
const fileUrl = `https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&x=id%3D${extensionID}%26uc&prodversion=${chromiumVersion}`;
|
||||
|
||||
if (!fs.existsSync(destFolder))
|
||||
fs.mkdirSync(destFolder, { recursive: true });
|
||||
|
||||
const fileStream = fs.createWriteStream(filePath);
|
||||
|
||||
const downloadFile = url => {
|
||||
return new Promise((resolve, reject) => {
|
||||
return /** @type {Promise<void>} */(new Promise((resolve, reject) => {
|
||||
const request = https.get(url);
|
||||
|
||||
request.on('response', response => {
|
||||
@@ -33,7 +38,7 @@ const downloadFile = url => {
|
||||
});
|
||||
request.on('error', reject);
|
||||
request.end();
|
||||
});
|
||||
}));
|
||||
};
|
||||
|
||||
(async () => {
|
||||
|
@@ -1,3 +1,5 @@
|
||||
import { match } from 'ciaplu';
|
||||
|
||||
function isJSON (str: string) {
|
||||
try {
|
||||
if (!['{', '['].includes(str.trim()[0]))
|
||||
@@ -176,17 +178,13 @@ function isMD (str: string) {
|
||||
}
|
||||
|
||||
export function langDetector (str: string) {
|
||||
if (!str || !str.trim().length)
|
||||
return 'text';
|
||||
if (isJSON(str))
|
||||
return 'json';
|
||||
if (isHTML(str))
|
||||
return 'html';
|
||||
if (isSVG(str))
|
||||
return 'svg';
|
||||
if (isXML(str))
|
||||
return 'xml';
|
||||
if (isMD(str))
|
||||
return 'markdown';
|
||||
return 'text';
|
||||
return match(str)
|
||||
.when(() => !str || !str.trim().length, () => 'text')
|
||||
.when(isJSON, () => 'json')
|
||||
.when(isHTML, () => 'html')
|
||||
.when(isSVG, () => 'svg')
|
||||
.when(isXML, () => 'xml')
|
||||
.when(isMD, () => 'markdown')
|
||||
.otherwise(() => 'text')
|
||||
.return();
|
||||
}
|
||||
|
@@ -1,45 +1,25 @@
|
||||
import { match } from 'ciaplu';
|
||||
|
||||
export function mimeFromHex (hex: string) {
|
||||
switch (hex.substring(0, 4)) { // 2 bytes
|
||||
case '424D':
|
||||
return { ext: 'bmp', mime: 'image/bmp' };
|
||||
case '1F8B':
|
||||
return { ext: 'tar.gz', mime: 'application/gzip' };
|
||||
case '0B77':
|
||||
return { ext: 'ac3', mime: 'audio/vnd.dolby.dd-raw' };
|
||||
case '7801':
|
||||
return { ext: 'dmg', mime: 'application/x-apple-diskimage' };
|
||||
case '4D5A':
|
||||
return { ext: 'exe', mime: 'application/x-msdownload' };
|
||||
case '1FA0':
|
||||
case '1F9D':
|
||||
return { ext: 'Z', mime: 'application/x-compress' };
|
||||
default:
|
||||
switch (hex.substring(0, 6)) { // 3 bytes
|
||||
case 'FFD8FF':
|
||||
return { ext: 'jpg', mime: 'image/jpeg' };
|
||||
case '4949BC':
|
||||
return { ext: 'jxr', mime: 'image/vnd.ms-photo' };
|
||||
case '425A68':
|
||||
return { ext: 'bz2', mime: 'application/x-bzip2' };
|
||||
default:
|
||||
switch (hex) { // 4 bites
|
||||
case '89504E47':
|
||||
return { ext: 'png', mime: 'image/png' };
|
||||
case '47494638':
|
||||
return { ext: 'gif', mime: 'image/gif' };
|
||||
case '25504446':
|
||||
return { ext: 'pdf', mime: 'application/pdf' };
|
||||
case '504B0304':
|
||||
return { ext: 'zip', mime: 'application/zip' };
|
||||
case '425047FB':
|
||||
return { ext: 'bpg', mime: 'image/bpg' };
|
||||
case '4D4D002A':
|
||||
return { ext: 'tif', mime: 'image/tiff' };
|
||||
case '00000100':
|
||||
return { ext: 'ico', mime: 'image/x-icon' };
|
||||
default:
|
||||
return { ext: '', mime: 'unknown ' + hex };
|
||||
}
|
||||
}
|
||||
}
|
||||
return match(hex.substring(0, 4)) // 2 bytes
|
||||
.with('424D', () => ({ ext: 'bmp', mime: 'image/bmp' }))
|
||||
.with('1F8B', () => ({ ext: 'tar.gz', mime: 'application/gzip' }))
|
||||
.with('0B77', () => ({ ext: 'ac3', mime: 'audio/vnd.dolby.dd-raw' }))
|
||||
.with('7801', () => ({ ext: 'dmg', mime: 'application/x-apple-diskimage' }))
|
||||
.with('4D5A', () => ({ ext: 'exe', mime: 'application/x-msdownload' }))
|
||||
.when((val) => ['1FA0', '1F9D'].includes(val), () => ({ ext: 'Z', mime: 'application/x-compress' }))
|
||||
.extracting(() => hex.substring(0, 6)) // 3 bytes
|
||||
.with('FFD8FF', () => ({ ext: 'jpg', mime: 'image/jpeg' }))
|
||||
.with('4949BC', () => ({ ext: 'jxr', mime: 'image/vnd.ms-photo' }))
|
||||
.with('425A68', () => ({ ext: 'bz2', mime: 'application/x-bzip2' }))
|
||||
.extracting(() => hex) // 4 bytes
|
||||
.with('89504E47', () => ({ ext: 'png', mime: 'image/png' }))
|
||||
.with('47494638', () => ({ ext: 'gif', mime: 'image/gif' }))
|
||||
.with('25504446', () => ({ ext: 'pdf', mime: 'application/pdf' }))
|
||||
.with('504B0304', () => ({ ext: 'zip', mime: 'application/zip' }))
|
||||
.with('425047FB', () => ({ ext: 'bpg', mime: 'image/bpg' }))
|
||||
.with('4D4D002A', () => ({ ext: 'tif', mime: 'image/tiff' }))
|
||||
.with('00000100', () => ({ ext: 'ico', mime: 'image/x-icon' }))
|
||||
.otherwise(() => ({ ext: '', mime: 'unknown ' + hex }))
|
||||
.return();
|
||||
}
|
||||
|
@@ -127,7 +127,7 @@ const fakerGroups = computed(() => {
|
||||
localType.value = 'datetime';
|
||||
else if (TIME.includes(props.type))
|
||||
localType.value = 'time';
|
||||
else if (UUID.includes(props.type))
|
||||
else if (UUID.includes(props.type) || (BLOB.includes(props.type) && props.field.key === 'pri'))
|
||||
localType.value = 'uuid';
|
||||
else
|
||||
localType.value = 'none';
|
||||
@@ -177,7 +177,7 @@ const inputProps = () => {
|
||||
return { type: 'text', mask: datetimeMask };
|
||||
}
|
||||
|
||||
if (BLOB.includes(props.type))
|
||||
if (BLOB.includes(props.type) && props.field.key !== 'pri')
|
||||
return { type: 'file', mask: false };
|
||||
|
||||
if (BIT.includes(props.type))
|
||||
|
@@ -47,65 +47,50 @@
|
||||
<div class="tile-history-buttons">
|
||||
<button
|
||||
v-if="note.type === 'todo' && !note.isArchived"
|
||||
class="btn btn-link pl-1"
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.archive')"
|
||||
@click.stop="$emit('archive-note', note.uid)"
|
||||
>
|
||||
<BaseIcon
|
||||
icon-name="mdiCheck"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.archive') }}
|
||||
<BaseIcon icon-name="mdiCheck" :size="22" />
|
||||
</button>
|
||||
<button
|
||||
v-if="note.type === 'todo' && note.isArchived"
|
||||
class="btn btn-link pl-1"
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.undo')"
|
||||
@click.stop="$emit('restore-note', note.uid)"
|
||||
>
|
||||
<BaseIcon
|
||||
icon-name="mdiRestore"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.undo') }}
|
||||
<BaseIcon icon-name="mdiRestore" :size="22" />
|
||||
</button>
|
||||
<button
|
||||
v-if="note.type === 'query'"
|
||||
class="btn btn-link pl-1"
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.select')"
|
||||
@click.stop="$emit('select-query', note.note)"
|
||||
>
|
||||
<BaseIcon
|
||||
icon-name="mdiOpenInApp"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.select') }}
|
||||
<BaseIcon icon-name="mdiOpenInApp" :size="22" />
|
||||
</button>
|
||||
<button
|
||||
v-if="note.type === 'query'"
|
||||
class="btn btn-link pl-1"
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.copy')"
|
||||
@click.stop="copyText(note.note)"
|
||||
>
|
||||
<BaseIcon
|
||||
icon-name="mdiContentCopy"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.copy') }}
|
||||
<BaseIcon icon-name="mdiContentCopy" :size="18" />
|
||||
</button>
|
||||
<button
|
||||
v-if=" !note.isArchived"
|
||||
class="btn btn-link pl-1"
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.edit')"
|
||||
@click.stop="$emit('edit-note')"
|
||||
>
|
||||
<BaseIcon
|
||||
icon-name="mdiPencil"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.edit') }}
|
||||
<BaseIcon icon-name="mdiPencil" :size="22" />
|
||||
</button>
|
||||
<button class="btn btn-link pl-1" @click.stop="$emit('delete-note', note.uid)">
|
||||
<BaseIcon
|
||||
icon-name="mdiDeleteForever"
|
||||
class="pr-1"
|
||||
:size="22"
|
||||
/> {{ t('general.delete') }}
|
||||
<button
|
||||
class="btn btn-dark tooltip tooltip-left"
|
||||
:data-tooltip="t('general.delete')"
|
||||
@click.stop="$emit('delete-note', note.uid)"
|
||||
>
|
||||
<BaseIcon icon-name="mdiDeleteForever" :size="22" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -278,11 +263,14 @@ const highlightWord = (string: string) => {
|
||||
|
||||
button {
|
||||
font-size: 0.7rem;
|
||||
height: 1rem;
|
||||
line-height: 1rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -31,25 +31,13 @@
|
||||
</div>
|
||||
<div v-if="isWindows" :style="'width: 140px;'" />
|
||||
<div v-if="isLinux" class="d-flex">
|
||||
<div
|
||||
v-if="isDevelopment"
|
||||
class="titlebar-element"
|
||||
@click="minimize"
|
||||
>
|
||||
<div class="titlebar-element" @click="minimize">
|
||||
<BaseIcon icon-name="mdiWindowMinimize" :size="18" />
|
||||
</div>
|
||||
<div
|
||||
v-if="isDevelopment"
|
||||
class="titlebar-element"
|
||||
@click="toggleFullScreen"
|
||||
>
|
||||
<div class="titlebar-element" @click="toggleFullScreen">
|
||||
<BaseIcon :icon-name="isMaximized ? 'mdiWindowRestore' : 'mdiWindowMaximize'" :size="18" />
|
||||
</div>
|
||||
<div
|
||||
v-if="isDevelopment"
|
||||
class="titlebar-element"
|
||||
@click="closeApp"
|
||||
>
|
||||
<div class="titlebar-element" @click="closeApp">
|
||||
<BaseIcon icon-name="mdiClose" :size="18" />
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -458,6 +458,8 @@ const getFieldsData = async () => {
|
||||
addNotification({ status: 'error', message: err.stack });
|
||||
}
|
||||
|
||||
isLoading.value = false;
|
||||
|
||||
if (workspace.value.customizations.tableCheck) {
|
||||
try { // Table checks
|
||||
const { status, response } = await Tables.getTableChecks(params);
|
||||
@@ -478,8 +480,6 @@ const getFieldsData = async () => {
|
||||
addNotification({ status: 'error', message: err.stack });
|
||||
}
|
||||
}
|
||||
|
||||
isLoading.value = false;
|
||||
};
|
||||
|
||||
const saveChanges = async () => {
|
||||
|
@@ -538,7 +538,7 @@ const closeContext = () => {
|
||||
};
|
||||
|
||||
const showDeleteConfirmModal = (e: any) => {
|
||||
if (e.code !== 'Delete') return;
|
||||
if (e && e.code !== 'Delete') return;
|
||||
if (e && e.path && ['INPUT', 'TEXTAREA', 'SELECT'].includes(e.path[0].tagName))
|
||||
return;
|
||||
if (selectedRows.value.length === 0) return;
|
||||
@@ -563,6 +563,7 @@ const deleteSelected = () => {
|
||||
table: getTable(resultsetIndex.value),
|
||||
rows
|
||||
};
|
||||
console.log(params);
|
||||
emit('delete-selected', params);
|
||||
};
|
||||
|
||||
|
@@ -440,7 +440,7 @@ const editON = async (field: string) => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (BLOB.includes(type)) {
|
||||
if (BLOB.includes(type) && props.fields[field].key !== 'pri') {
|
||||
isBlobEditor.value = true;
|
||||
editingContent.value = content || '';
|
||||
fileToUpload.value = null;
|
||||
@@ -458,9 +458,12 @@ const editON = async (field: string) => {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
emit('start-editing', field);
|
||||
return;
|
||||
}
|
||||
else if (BLOB.includes(type) && props.fields[field].key === 'pri')// Disable edit on BLOB primary until we are sure it's not problematic
|
||||
return;
|
||||
|
||||
// Inline editable fields
|
||||
editingContent.value = originalContent.value;
|
||||
|
@@ -56,10 +56,10 @@ export function useResultTables (uid: string, reloadTable: () => void) {
|
||||
if (status === 'success')
|
||||
reloadTable();
|
||||
else
|
||||
this.addNotification({ status: 'error', message: response });
|
||||
addNotification({ status: 'error', message: response });
|
||||
}
|
||||
catch (err) {
|
||||
this.addNotification({ status: 'error', message: err.stack });
|
||||
addNotification({ status: 'error', message: err.stack });
|
||||
isQuering.value = false;
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +1,7 @@
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
const ProgressPlugin = require('progress-webpack-plugin');
|
||||
|
||||
const { dependencies, devDependencies, version } = require('./package.json');
|
||||
const { dependencies, devDependencies } = require('./package.json');
|
||||
|
||||
const externals = Object.keys(dependencies).concat(Object.keys(devDependencies));
|
||||
const isDevMode = process.env.NODE_ENV === 'development';
|
||||
@@ -48,13 +47,7 @@ module.exports = { // Main
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new ProgressPlugin(true),
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': {
|
||||
PACKAGE_VERSION: `"${version}"`,
|
||||
DISTRIBUTION: `"${process.env.DISTRIBUTION || 'none'}"`
|
||||
}
|
||||
})
|
||||
new ProgressPlugin(true)
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
|
Reference in New Issue
Block a user