Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1233277277 | ||
|
|
6f5361c715 | ||
|
|
bea785abae |
@@ -439,8 +439,8 @@ const SnippetsManager: React.FC<SnippetsManagerProps> = ({
|
||||
const name = newPackageName.trim();
|
||||
if (!name) return;
|
||||
|
||||
// Allow leading slash and validate the rest - allow hyphens anywhere in package names
|
||||
if (!/^\/?([\w-]+(\/[\w-]+)*)\/?$/.test(name)) {
|
||||
// Allow leading slash and validate the rest - allow hyphens and Unicode letters/numbers
|
||||
if (!/^\/?([\w\p{L}\p{N}-]+(\/[\w\p{L}\p{N}-]+)*)\/?$/u.test(name)) {
|
||||
// Could add toast notification here for invalid characters
|
||||
return;
|
||||
}
|
||||
@@ -550,9 +550,9 @@ const SnippetsManager: React.FC<SnippetsManagerProps> = ({
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate: same rules as createPackage - only allow letters, numbers, hyphens, underscores
|
||||
// Validate: same rules as createPackage - allow Unicode letters, numbers, hyphens, underscores
|
||||
// Since we're renaming a single segment (no slashes allowed), use the segment-level pattern
|
||||
if (!/^[\w-]+$/.test(newName)) {
|
||||
if (!/^[\w\p{L}\p{N}-]+$/u.test(newName)) {
|
||||
setRenameError(t('snippets.renameDialog.error.invalidChars'));
|
||||
return;
|
||||
}
|
||||
@@ -1203,7 +1203,6 @@ const SnippetsManager: React.FC<SnippetsManagerProps> = ({
|
||||
value={newPackageName}
|
||||
onChange={(e) => setNewPackageName(e.target.value)}
|
||||
onKeyDown={(e) => e.key === 'Enter' && createPackage()}
|
||||
pattern="^/?([\w-]+(/[\w-]+)*)?/?$"
|
||||
title="Package names can contain letters, numbers, hyphens, underscores, and forward slashes. Can optionally start with /"
|
||||
/>
|
||||
<p className="text-[11px] text-muted-foreground">{t('snippets.packageDialog.hint')}</p>
|
||||
|
||||
@@ -106,6 +106,11 @@ module.exports = {
|
||||
],
|
||||
category: 'Development'
|
||||
},
|
||||
deb: {
|
||||
// Use gzip instead of default xz(lzma) for better compatibility with
|
||||
// Deepin OS and other distros that have issues with lzma decompression
|
||||
compression: 'gz'
|
||||
},
|
||||
publish: [
|
||||
{
|
||||
provider: 'github',
|
||||
|
||||
@@ -1102,10 +1102,15 @@ export class CloudSyncManager {
|
||||
if (checkResult.conflict && checkResult.remoteFile) {
|
||||
// Remote is newer — attempt three-way merge instead of blocking
|
||||
try {
|
||||
const remotePayload = await EncryptionService.decryptPayload(
|
||||
checkResult.remoteFile,
|
||||
this.masterPassword,
|
||||
);
|
||||
let remotePayload: SyncPayload;
|
||||
try {
|
||||
remotePayload = await EncryptionService.decryptPayload(
|
||||
checkResult.remoteFile,
|
||||
this.masterPassword,
|
||||
);
|
||||
} catch (decryptError) {
|
||||
throw new Error(`Decryption failed (master password may differ between devices): ${decryptError instanceof Error ? decryptError.message : String(decryptError)}`);
|
||||
}
|
||||
const base = await this.loadSyncBase(provider);
|
||||
const mergeResult = mergeSyncPayloads(base, payload, remotePayload);
|
||||
|
||||
@@ -1239,13 +1244,23 @@ export class CloudSyncManager {
|
||||
const adapter = await this.getConnectedAdapter(provider);
|
||||
|
||||
try {
|
||||
const remoteFile = await adapter.download();
|
||||
let remoteFile: SyncedFile | null;
|
||||
try {
|
||||
remoteFile = await adapter.download();
|
||||
} catch (downloadError) {
|
||||
throw new Error(`Download failed: ${downloadError instanceof Error ? downloadError.message : String(downloadError)}`);
|
||||
}
|
||||
if (!remoteFile) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Decrypt
|
||||
const payload = await EncryptionService.decryptPayload(remoteFile, this.masterPassword);
|
||||
let payload: SyncPayload;
|
||||
try {
|
||||
payload = await EncryptionService.decryptPayload(remoteFile, this.masterPassword);
|
||||
} catch (decryptError) {
|
||||
throw new Error(`Decryption failed (master password may differ between devices): ${decryptError instanceof Error ? decryptError.message : String(decryptError)}`);
|
||||
}
|
||||
|
||||
// Update local tracking
|
||||
this.state.localVersion = remoteFile.meta.version;
|
||||
|
||||
Reference in New Issue
Block a user