Skip to content

Commit

Permalink
async contract handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas Lukasczyk committed Feb 10, 2025
1 parent 93c5cef commit bb55d2c
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 71 deletions.
38 changes: 23 additions & 15 deletions packages/renderer/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,30 @@ const test = async ()=>{
>
<q-list class="column sidebar-container" style="height:100%; flex-wrap: nowrap;">
<q-item v-ripple clickable class='bg-primary text-white' @click="showHomeView" style="padding-top:1em;padding-bottom:1em;">
<q-item-section avatar>
<q-icon size="2.5rem" style="margin: 0 -0.20em;" :name="'img:'+logoURL" @click='showHomeView'></q-icon>
<q-item-section avatar style="height:2.5em">
<q-inner-loading
:showing="ArcControlService.props.busy"
style="width:4em;background-color:transparent"
>
<q-spinner
color="white"
size="2.5em"
:thickness="10"
/>
</q-inner-loading>
<q-inner-loading
:showing="!ArcControlService.props.busy"
style="width:4em;background-color:transparent"
>
<q-icon
size="2.5rem"
style="margin: 0 -0.20em;"
:name="'img:'+logoURL"
@click='showHomeView'>
</q-icon>
</q-inner-loading>
</q-item-section>

<q-item-section style="margin:0.6em 0 0 -1.2em">
<q-item-label><b style="font-size:2em">ARC</b><span style="font-size:1.2em">itect</span></q-item-label>
</q-item-section>
Expand Down Expand Up @@ -385,19 +406,6 @@ const test = async ()=>{
</q-page>
</q-page-container>
</q-layout>

<div class='ModalLoading' v-if='ArcControlService.props.busy'>
<div>
<q-circular-progress
indeterminate
size="20em"
color="primary"
class="q-ma-md"
:thickness="0.6"
/>
</div>
</div>

</template>

<style>
Expand Down
121 changes: 65 additions & 56 deletions packages/renderer/src/ArcControlService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@ let init: {
arc: null | ARC,
git_initialized: boolean,
skip_fs_updates: boolean,
contract_stack: Object[],
} = {
arc_root: undefined ,
busy: false,
arc: null,
git_initialized: false,
skip_fs_updates: false
skip_fs_updates: false,
contract_stack: []
}

function relative_to_absolute_path(relativePath: string) {
Expand All @@ -41,9 +43,21 @@ const ArcControlService = {

props: reactive(init),

processContractStack: async(arc, arc_root)=>{
ArcControlService.props.busy = true;

if(ArcControlService.props.contract_stack.length<1){
ArcControlService.props.busy = false;
return;
}

const contract = ArcControlService.props.contract_stack.shift();
await ArcControlService.processContract(contract, arc, arc_root);
await ArcControlService.processContractStack(arc,arc_root);
},

closeARC: async() => {
ArcControlService.props.arc_root = undefined;
ArcControlService.props.busy = false;
ArcControlService.props.arc = null;
AppProperties.state = 0;
return;
Expand All @@ -61,8 +75,6 @@ const ArcControlService = {
return false;
}

ArcControlService.props.busy = true;

const xlsx_files = await window.ipc.invoke('LocalFileSystemService.getAllXLSX', arc_root);
const arc = ARC.fromFilePaths(xlsx_files);
const contracts = arc.GetReadContracts();
Expand All @@ -79,64 +91,59 @@ const ArcControlService = {
cwd: arc_root
});
ArcControlService.props.git_initialized = git_initialized[0];

ArcControlService.props.busy = false;
console.log(arc);
return true;
},

handleARCContracts: async (contracts: Contract [], arc: ARC, arc_root: string) => {
processContract: async (contract: Contract, arc: ARC, arc_root: string) => {
arc = arc || ArcControlService.props.arc;
arc_root = arc_root || ArcControlService.props.arc_root;
if(!arc || !arc_root)
return;
ArcControlService.props.busy = true;
arc.UpdateFileSystem();
for(const contract of contracts) {
console.log('CONTRACT',contract);
switch (contract.Operation) {
case 'DELETE':
await window.ipc.invoke(
'LocalFileSystemService.remove',
arc_root + '/' +contract.Path
);
break;
case 'UPDATE': case 'CREATE':
if(['ISA_Investigation','ISA_Study','ISA_Assay', 'ISA_Datamap'].includes(contract.DTOType)){
const buffer = await Xlsx.toBytes(contract.DTO);
const absolutePath = arc_root + '/' +contract.Path;
await window.ipc.invoke(
'LocalFileSystemService.writeFile',
[
absolutePath,
buffer,
{}
]
);
break;
} else if(contract.DTOType==='PlainText'){
await window.ipc.invoke('LocalFileSystemService.writeFile', [
arc_root+'/'+contract.Path,
contract.DTO || '',
{encoding:'UTF-8', flag: 'wx'}
]);
} else {
return console.log('unable to resolve write contract', contract);
}
break;
case 'RENAME':
console.log('CONTRACT',contract);
switch (contract.Operation) {
case 'DELETE':
await window.ipc.invoke(
'LocalFileSystemService.remove',
arc_root + '/' +contract.Path
);
break;
case 'UPDATE': case 'CREATE':
if(['ISA_Investigation','ISA_Study','ISA_Assay', 'ISA_Datamap'].includes(contract.DTOType)){
const buffer = await Xlsx.toBytes(contract.DTO);
const absolutePath = arc_root + '/' +contract.Path;
await window.ipc.invoke(
'LocalFileSystemService.rename',
'LocalFileSystemService.writeFile',
[
arc_root + '/' + contract.Path,
arc_root + '/' + contract.DTO
absolutePath,
buffer,
{}
]
);
break;
default:
console.log(`Warning. 'handleARCContracts' hit unknown expression for contract type: ${contract.Operation} in ${contract}.`)
break;
}
} else if(contract.DTOType==='PlainText'){
await window.ipc.invoke('LocalFileSystemService.writeFile', [
arc_root+'/'+contract.Path,
contract.DTO || '',
{encoding:'UTF-8', flag: 'wx'}
]);
} else {
return console.log('unable to resolve write contract', contract);
}
break;
case 'RENAME':
await window.ipc.invoke(
'LocalFileSystemService.rename',
[
arc_root + '/' + contract.Path,
arc_root + '/' + contract.DTO
]
);
break;
default:
console.log(`Warning. 'processContract' hit unknown expression for contract type: ${contract.Operation} in ${contract}.`)
break;
}
},

Expand All @@ -153,8 +160,6 @@ const ArcControlService = {
if(!arc_root)
return;

ArcControlService.props.busy = true;

arc.UpdateFileSystem();
let contracts = options.force ? arc.GetWriteContracts() : arc.GetUpdateContracts();

Expand All @@ -167,24 +172,28 @@ const ArcControlService = {
contracts.push(
);

await ArcControlService.handleARCContracts(contracts, arc, arc_root);
for(let c of contracts)
ArcControlService.props.contract_stack.push(c);

ArcControlService.props.busy = false;
if(!ArcControlService.props.busy)
await ArcControlService.processContractStack(arc, arc_root);
},

delete: async (method:string, identifier:string) => {
await ArcControlService.handleARCContracts(
ArcControlService.props.arc[method](identifier)
);
ArcControlService.props.contract_stack.push(ArcControlService.props.arc[method](identifier));
if(!ArcControlService.props.busy)
ArcControlService.processContractStack();
},

rename: async (method:string, old_identifier:string, new_identifier:string) => {
await ArcControlService.handleARCContracts(
ArcControlService.props.contract_stack.push(
ArcControlService.props.arc[method](
old_identifier,
new_identifier
)
);
if(!ArcControlService.props.busy)
ArcControlService.processContractStack();
},

newARC: async (path: string) =>{
Expand Down

0 comments on commit bb55d2c

Please sign in to comment.