move translations to CoreVM, move models to CoreVM for sentralization

This commit is contained in:
marlon-erler
2026-04-09 16:48:22 +00:00
parent 6204669ba3
commit 78672afc40
42 changed files with 1786 additions and 1322 deletions
+22 -19
View File
@@ -4,8 +4,6 @@ import ConnectionModel from "../../Model/Global/connectionModel";
import CoreViewModel from "./coreViewModel";
export default class ConnectionViewModel {
connectionModel: ConnectionModel;
// state
serverAddressInput: React.State<string> = new React.State("");
isConnected: React.State<boolean> = new React.State(false);
@@ -20,7 +18,7 @@ export default class ConnectionViewModel {
() =>
(this.isConnected.value == true &&
this.serverAddressInput.value ==
this.connectionModel.address) ||
this.coreViewModel.connectionModel.address) ||
this.serverAddressInput.value == "",
);
cannotDisonnect: React.State<boolean> = React.createProxyState(
@@ -34,15 +32,22 @@ export default class ConnectionViewModel {
// handlers
connectionChangeHandler = (): void => {
this.isConnected.value = this.connectionModel.isConnected;
this.isConnected.value = this.coreViewModel.connectionModel.isConnected;
if (this.connectionModel.isConnected == false) return;
if (this.connectionModel.address == undefined) return;
if (this.coreViewModel.connectionModel.isConnected == false) return;
if (this.coreViewModel.connectionModel.address == undefined) return;
this.serverAddressInput.value = this.connectionModel.address;
this.serverAddressInput.value =
this.coreViewModel.connectionModel.address;
if (!this.previousAddresses.value.has(this.connectionModel.address)) {
this.previousAddresses.add(this.connectionModel.address);
if (
!this.previousAddresses.value.has(
this.coreViewModel.connectionModel.address,
)
) {
this.previousAddresses.add(
this.coreViewModel.connectionModel.address,
);
}
};
@@ -53,15 +58,15 @@ export default class ConnectionViewModel {
connectToAddress = (address: string): void => {
console.log(address);
this.connectionModel.connect(address);
this.coreViewModel.connectionModel.connect(address);
};
disconnect = (): void => {
this.connectionModel.disconnect();
this.coreViewModel.connectionModel.disconnect();
};
removePreviousAddress = (address: string): void => {
this.connectionModel.removeAddress(address);
this.coreViewModel.connectionModel.removeAddress(address);
this.updatePreviousAddresses();
};
@@ -76,18 +81,16 @@ export default class ConnectionViewModel {
updatePreviousAddresses = (): void => {
this.previousAddresses.clear();
this.previousAddresses.add(...this.connectionModel.addresses);
this.previousAddresses.add(
...this.coreViewModel.connectionModel.addresses,
);
};
// init
constructor(
public coreViewModel: CoreViewModel,
connectionModel: ConnectionModel,
) {
this.connectionModel = connectionModel;
constructor(public coreViewModel: CoreViewModel) {
this.updatePreviousAddresses();
connectionModel.connectionChangeHandlerManager.addHandler(
coreViewModel.connectionModel.connectionChangeHandlerManager.addHandler(
this.connectionChangeHandler,
);
}
+21 -1
View File
@@ -1,7 +1,15 @@
import * as React from "bloatless-react";
import SettingsModel from "../../Model/Global/settingsModel";
import { allTranslations, Translations } from "../../View/translations";
import StorageModel from "../../Model/Global/storageModel";
import ConnectionModel from "../../Model/Global/connectionModel";
import ChatListModel from "../../Model/Chat/chatListModel";
import FileTransferModel from "../../Model/Global/fileTransferModel";
export default class CoreViewModel {
readonly BUILD = "Build 26.04.08.C";
readonly BUILD = "Build 26.04.09.A";
translations: Translations;
// DRAG & DROP
draggedObject: React.State<any> = new React.State<any>(undefined);
@@ -13,4 +21,16 @@ export default class CoreViewModel {
taskCategorySuggestions: React.ListState<string> = new React.ListState();
taskStatusSuggestions: React.ListState<string> = new React.ListState();
// init
constructor(
public storageModel: StorageModel,
public settingsModel: SettingsModel,
public connectionModel: ConnectionModel,
public chatListModel: ChatListModel,
public fileTransferModel: FileTransferModel,
) {
this.translations =
allTranslations[settingsModel.language] || allTranslations.en;
}
}
+17 -23
View File
@@ -10,12 +10,9 @@ import StorageModel, {
import ChatListModel from "../../Model/Chat/chatListModel";
import ChatModel from "../../Model/Chat/chatModel";
import { translations } from "../../View/translations";
import CoreViewModel from "./coreViewModel";
export default class FileTransferViewModel {
fileTransferModel: FileTransferModel;
chatListModel: ChatListModel;
// state
presentedModal: React.State<FileTransferModals | undefined> =
new React.State<any>(undefined);
@@ -40,7 +37,7 @@ export default class FileTransferViewModel {
filesSentText: React.State<string> = React.createProxyState(
[this.filesSentCount],
() =>
translations.dataTransferModal.filesSentCount(
this.coreViewModel.translations.dataTransferModal.filesSentCount(
this.filesSentCount.value,
),
);
@@ -53,7 +50,7 @@ export default class FileTransferViewModel {
filesReceivedText: React.State<string> = React.createProxyState(
[this.filesReceivedCount],
() =>
translations.dataTransferModal.filesReceivedCount(
this.coreViewModel.translations.dataTransferModal.filesReceivedCount(
this.filesReceivedCount.value,
),
);
@@ -84,14 +81,16 @@ export default class FileTransferViewModel {
this.generalFileOptions.add(
{
label: translations.dataTransferModal.connectionData,
label: this.coreViewModel.translations.dataTransferModal
.connectionData,
path: StorageModel.getPath(
StorageModelSubPaths.ConnectionModel,
filePaths.connectionModel.previousAddresses,
),
},
{
label: translations.dataTransferModal.settingsData,
label: this.coreViewModel.translations.dataTransferModal
.settingsData,
path: StorageModel.getPath(
StorageModelSubPaths.SettingsModel,
[],
@@ -99,7 +98,8 @@ export default class FileTransferViewModel {
},
);
const chatModels: Set<ChatModel> = this.chatListModel.chatModels;
const chatModels: Set<ChatModel> =
this.coreViewModel.chatListModel.chatModels;
for (const chatModel of chatModels) {
this.chatFileOptions.add({
label: chatModel.info.primaryChannel,
@@ -110,7 +110,7 @@ export default class FileTransferViewModel {
getTransferData = (): void => {
const transferData: TransferData =
this.fileTransferModel.generateTransferData();
this.coreViewModel.fileTransferModel.generateTransferData();
this.transferChannel.value = transferData.channel;
this.transferKey.value = transferData.key;
};
@@ -128,7 +128,7 @@ export default class FileTransferViewModel {
showTransferDataModal = (): void => {
this.presentedModal.value = FileTransferModals.TransferDataDisplay;
this.getTransferData();
this.fileTransferModel.prepareToSend();
this.coreViewModel.fileTransferModel.prepareToSend();
};
initiateTransfer = (): void => {
@@ -136,7 +136,7 @@ export default class FileTransferViewModel {
this.didNotFinishSending.value = true;
this.filePathsSent.clear();
this.fileTransferModel.sendFiles(
this.coreViewModel.fileTransferModel.sendFiles(
this.selectedPaths.value.values(),
(path: string) => {
console.log(path);
@@ -159,7 +159,7 @@ export default class FileTransferViewModel {
channel: this.receivingTransferChannel.value,
key: this.receivingTransferKey.value,
};
this.fileTransferModel.prepareToReceive(transferData);
this.coreViewModel.fileTransferModel.prepareToReceive(transferData);
};
hideModal = (): void => {
@@ -167,19 +167,13 @@ export default class FileTransferViewModel {
};
// init
constructor(
fileTransferModel: FileTransferModel,
chatListModel: ChatListModel,
) {
this.fileTransferModel = fileTransferModel;
this.chatListModel = chatListModel;
this.fileTransferModel.fileHandlerManager.addHandler(
constructor(public coreViewModel: CoreViewModel) {
this.coreViewModel.fileTransferModel.fileHandlerManager.addHandler(
this.handleReceivedFile,
);
this.fileTransferModel.readyToSendHandlerManager.addHandler(() =>
this.initiateTransfer(),
this.coreViewModel.fileTransferModel.readyToSendHandlerManager.addHandler(
() => this.initiateTransfer(),
);
}
}
+16 -17
View File
@@ -2,36 +2,40 @@ import * as React from "bloatless-react";
import CoreViewModel from "./coreViewModel";
import SettingsModel from "../../Model/Global/settingsModel";
import { Languages } from "../../View/translations";
export default class SettingsViewModel {
settingsModel: SettingsModel;
// state
username: React.State<string> = new React.State("");
usernameInput: React.State<string> = new React.State("");
firstDayOfWeekInput: React.State<string> = new React.State("0");
isShowingSettingsModal: React.State<boolean> = new React.State(false);
selectedModalPage: React.State<SettingsModalPages> = new React.State(
SettingsModalPages.Appearance,
);
firstDayOfWeek: React.State<string> = new React.State("0");
language: React.State<Languages> = new React.State(Languages.English);
// guards
cannotSetName: React.State<boolean> = React.createProxyState(
[this.usernameInput],
() =>
this.usernameInput.value == "" ||
this.usernameInput.value == this.settingsModel.username,
this.usernameInput.value ==
this.coreViewModel.settingsModel.username,
);
// methods
setName = (): void => {
this.settingsModel.setName(this.usernameInput.value);
this.username.value = this.settingsModel.username;
this.coreViewModel.settingsModel.setName(this.usernameInput.value);
this.username.value = this.coreViewModel.settingsModel.username;
this.usernameInput.callSubscriptions();
};
setFirstDayofWeek = (): void => {
this.settingsModel.setFirstDayOfWeek(this.firstDayOfWeekInput.value);
this.coreViewModel.settingsModel.setFirstDayOfWeek(
this.firstDayOfWeek.value,
);
};
showSettingsModal = (): void => {
@@ -47,18 +51,13 @@ export default class SettingsViewModel {
};
// init
constructor(
public coreViewModel: CoreViewModel,
settingsModel: SettingsModel,
) {
this.settingsModel = settingsModel;
this.username.value = settingsModel.username;
this.usernameInput.value = settingsModel.username;
this.firstDayOfWeekInput.value = settingsModel.firstDayOfWeek;
constructor(public coreViewModel: CoreViewModel) {
this.username.value = coreViewModel.settingsModel.username;
this.usernameInput.value = coreViewModel.settingsModel.username;
this.firstDayOfWeek.value = coreViewModel.settingsModel.firstDayOfWeek;
// subscriptions
this.firstDayOfWeekInput.subscribe(this.setFirstDayofWeek);
this.firstDayOfWeek.subscribe(this.setFirstDayofWeek);
}
}
+6 -14
View File
@@ -5,11 +5,8 @@ import StorageModel, {
} from "../../Model/Global/storageModel";
import CoreViewModel from "./coreViewModel";
import { translations } from "../../View/translations";
export default class StorageViewModel {
storageModel: StorageModel;
// state
isShowingStorageModal: React.State<boolean> = new React.State(false);
selectedPath: React.State<string> = new React.State(
@@ -27,10 +24,10 @@ export default class StorageViewModel {
const path = StorageModel.stringToPathComponents(
this.selectedPath.value,
);
const content = this.storageModel.read(path);
const content = this.coreViewModel.storageModel.read(path);
return (
(content ?? translations.storage.notAFile) ||
translations.storage.contentEmpty
(content ?? this.coreViewModel.translations.storage.notAFile) ||
this.coreViewModel.translations.storage.contentEmpty
);
};
@@ -40,12 +37,12 @@ export default class StorageViewModel {
);
this.lastDeletedItemPath.value = this.selectedPath.value;
this.storageModel.removeRecursively(path);
this.coreViewModel.storageModel.removeRecursively(path);
this.didMakeChanges.value = true;
};
removeJunk = (): void => {
this.storageModel.removeJunk();
this.coreViewModel.storageModel.removeJunk();
this.selectedPath.value = PATH_COMPONENT_SEPARATOR;
};
@@ -63,12 +60,7 @@ export default class StorageViewModel {
};
// init
constructor(
public coreViewModel: CoreViewModel,
storageModel: StorageModel,
) {
this.storageModel = storageModel;
constructor(public coreViewModel: CoreViewModel) {
this.selectedFileName = React.createProxyState(
[this.selectedPath],
() => StorageModel.getFileNameFromString(this.selectedPath.value),