Skip to content

Commit 541cea0

Browse files
committed
End of life, last commit
1 parent c78aca9 commit 541cea0

File tree

14 files changed

+151
-6
lines changed

14 files changed

+151
-6
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ Open Source Radionics
33

44
![Dashboard](https://raw.githubusercontent.com/isuretpolos/AetherOnePi/master/documentation/screenshots/analysis.jpg)
55

6+
## End of life
7+
I stop the maintenance for this project and will invest all my energies into the development of the new **AetherOnePy** (AOPy). Naturally this repository remains alife for everyone.
8+
69
## User manual (READ IT)
710
**Please read first the [AetherOnePi User Manual](https://radionics.home.blog/aetheonepi/)**, because it explains **step by step** the most important features and techniques for analysis and broadcasting.
811

@@ -19,6 +22,7 @@ or download the Beta which is build after each change on the [Action tab](https:
1922
Subscribe to my blog(s) and join the [VK community](https://vk.com/aetherone), [Reddit](https://www.reddit.com/r/digitalradionics/) or chat with **Thalia** on [Facebook MorphicEngineering Group](https://www.facebook.com/groups/morphicengineering).
2023

2124
# Feature History
25+
- 2024-12-13 **End of life** reached. New project AetherOne**Py** will replace AetherOne**Pi**
2226
- 2024-04-04 Anomaly Search in the Map
2327
- 2024-03-15 Map Analysis, browser UI
2428
- 2024-02-17 bugfixes and experimental features that will be revealed in the next version

documentation/dashboardNews.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
Welcome to AetherOnePi, free Radionics for everyone!!!
22

3-
The most current version is the 1.3.8 with useful improvements!
3+
END OF LIFE - new project will be AetherOnePy
44

55
Read the documentation by clicking on the button "DOCUMENTATION".
66
Else join the PATREON community if you have questions and if
77
you want to contribute with your experience to the open source
88
project.
99

1010
There is also a new blog on radionics in German.
11-
A free book is currently in the works!
1211
You can chat also with me via email: [email protected]

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<description>Open Source Radionics</description>
1010

1111
<properties>
12-
<aether.version>1.3.8</aether.version>
12+
<aether.version>1.3.9</aether.version>
1313
<java.version>1.8</java.version>
1414
<commons-io.version>2.7</commons-io.version>
1515
<pi4j-core.version>1.2</pi4j-core.version>

src/main/java/de/isuret/polos/AetherOnePi/processing2/elements/DashboardScreen.java

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public void draw() {
9494
}
9595

9696
for (String dataBaseName : p.getDataService().getDashboardInformations().getRecentlyLoadedCases()) {
97+
if (dataBaseName.contains("dashboard")) continue;
9798
if (p.mouseX >= 50 && p.mouseX < 300 && p.mouseY < y && p.mouseY >= y - 20) {
9899
p.noStroke();
99100
p.fill(0,255,0,50f);

src/main/java/de/isuret/polos/AetherOnePi/server/AetherOneServer.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,13 @@ public void init(Location location) {
7777
ctx.json(settings);
7878
});
7979

80+
app.get("case/current", ctx -> {ctx.json(p.getCaseObject());});
8081
app.get("case", ctx -> {
81-
ctx.json(p.getCaseObject());
82+
if (ctx.queryParam("name") != null) {
83+
ctx.json(p.getDataService().loadCase(ctx.queryParam("name")));
84+
} else {
85+
ctx.json(p.getDataService().getAllCasesNames());
86+
}
8287
});
8388

8489
app.post("case", ctx -> {

src/main/java/de/isuret/polos/AetherOnePi/service/DataService.java

+18
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.eclipse.jgit.lib.Repository;
1515
import org.eclipse.jgit.lib.StoredConfig;
1616
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
17+
import processing.data.Sort;
1718

1819
import java.io.File;
1920
import java.io.IOException;
@@ -186,6 +187,23 @@ public void saveCase(Case caseObject) throws IOException {
186187
mapper.writeValue(new File("cases/" + caseObject.getName().replaceAll(" ","") + ".json"), caseObject);
187188
}
188189

190+
public List<String> getAllCasesNames() {
191+
File dir = new File("cases");
192+
List<String> names = new ArrayList<>();
193+
for (File file : Objects.requireNonNull(dir.listFiles())) {
194+
if (file.isFile() && file.getName().endsWith(".json") && !file.getName().contains("dashboardInformations")) {
195+
names.add(file.getName().replace(".json",""));
196+
}
197+
}
198+
names.sort(Comparator.comparing(String::toLowerCase));
199+
return names;
200+
}
201+
202+
public Case loadCase(String caseName) throws IOException {
203+
File caseFile = new File("cases/" + caseName + ".json");
204+
return loadCase(caseFile);
205+
}
206+
189207
public Case loadCase(File caseFile) throws IOException {
190208

191209
if (!caseFile.exists()) {

src/main/ui/src/app/app-routing.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import {BroadcastComponent} from "./components/broadcast/broadcast.component";
77
import {HttpClientModule} from "@angular/common/http";
88
import {WeaverComponent} from "./components/weaver/weaver.component";
99
import {MapComponent} from "./components/map/map.component";
10+
import {CasesComponent} from "./components/cases/cases.component";
1011

1112
const routes: Routes = [
1213
{path: '', redirectTo: 'HOME', pathMatch: 'full'},
1314
{path: 'HOME', component: HomeComponent},
15+
{path: 'CASES', component: CasesComponent},
1416
{path: 'ANALYSIS', component: AnalysisComponent},
1517
{path: 'MAP', component: MapComponent},
1618
{path: 'WEAVER', component: WeaverComponent},

src/main/ui/src/app/app.module.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { MapComponent } from './components/map/map.component';
1414
import {allIcons, NgxBootstrapIconsModule} from "ngx-bootstrap-icons";
1515
import {ToastrModule} from "ngx-toastr";
1616
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
17+
import { CasesComponent } from './components/cases/cases.component';
1718

1819
@NgModule({
1920
declarations: [
@@ -23,7 +24,8 @@ import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
2324
SettingsComponent,
2425
BroadcastComponent,
2526
WeaverComponent,
26-
MapComponent
27+
MapComponent,
28+
CasesComponent
2729
],
2830
imports: [
2931
BrowserModule,

src/main/ui/src/app/components/app/app.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export class AppComponent {
4545

4646
private initLinks() {
4747
this.addLink("HOME", true, "#f88b00");
48+
this.addLink("CASES", false, "#10a4d1");
4849
this.addLink("ANALYSIS", false, "#c410d1");
4950
this.addLink("MAP", false, "#21a103");
5051
this.addLink("WEAVER", false, "#10d1b1");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<div *ngIf="caseObject">
2+
<h1>{{caseObject.name}}</h1>
3+
<b>Created {{caseObject.created | date:"MMM dd, yyyy 'at' hh:mm a"}}</b>
4+
<hr>
5+
<p>{{caseObject.description}}</p>
6+
<button *ngFor="let session of caseObject.sessionList" class="btn btn-sm btn-outline-light" style="margin-left: 0.2rem" [class.noAnalysis]="!session.analysisResult"
7+
(click)="selectedSession = session">{{session.created | date:"MMM dd, yyyy 'at' hh:mm a"}} {{session.intenion}} {{session.description}}</button>
8+
9+
<div *ngIf="selectedSession && selectedSession.analysisResult">
10+
<hr>
11+
<button class="btn btn-danger btn-sm" (click)="selectedSession = undefined">Close Session</button>
12+
<table class="table table-sm table-striped table-hover">
13+
<thead>
14+
<tr>
15+
<th>NO</th>
16+
<th>EV</th>
17+
<th>RATE/SIGNATURE</th>
18+
<th>POTENCY</th>
19+
<th>LEVEL</th>
20+
<th>HIT</th>
21+
<th>GV</th>
22+
<th>GV RE</th>
23+
<th>REC</th>
24+
</tr>
25+
</thead>
26+
<tbody>
27+
<tr *ngFor="let r of selectedSession.analysisResult.rateObjects; index as i"
28+
[class.currentGvRow]="i == selectedSession.analysisResult.generalVitality"
29+
[class.hitGvRow]="r.gv > 999 && r.gv >= selectedSession.analysisResult.generalVitality"
30+
[class.greenGvRow]="r.gv > 999 && r.gv < selectedSession.analysisResult.generalVitality">
31+
<td>{{i + 1}}</td>
32+
<td>{{r.energeticValue}}</td>
33+
<td *ngIf="r.url"><a href="{{r.url}}" target="{{r.nameOrRate}}">{{r.nameOrRate}}</a></td>
34+
<td *ngIf="!r.url">{{r.nameOrRate}}</td>
35+
<td>{{r.potency}}</td>
36+
<td>{{r.level}}</td>
37+
<td></td>
38+
<td>{{r.gv}}</td>
39+
<td>{{r.recurringGeneralVitality}}</td>
40+
<td>{{r.recurring}}</td>
41+
</tr>
42+
</tbody>
43+
</table>
44+
</div>
45+
</div>
46+
47+
<table class="table table-sm table-striped table-hover">
48+
<thead>
49+
<tr>
50+
<th>NAME</th>
51+
<th>ACTIONS</th>
52+
</tr>
53+
</thead>
54+
<tbody>
55+
<tr *ngFor="let c of caseNames">
56+
<td>
57+
<button class="btn btn-sm btn-success" (click)="openCase(c)">{{c}}</button>
58+
</td>
59+
<td>
60+
<button class="btn btn-sm btn-danger" (click)="deletCase(c)">X</button>
61+
</td>
62+
</tr>
63+
</tbody>
64+
</table>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.noAnalysis {
2+
background-color: #482828;
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import {AetherOnePiService} from "../../services/aether-one-pi.service";
3+
import {Case, Session} from "../../domains/Case";
4+
import {DatePipe} from "@angular/common";
5+
6+
@Component({
7+
selector: 'app-cases',
8+
templateUrl: './cases.component.html',
9+
styleUrls: ['./cases.component.scss']
10+
})
11+
export class CasesComponent implements OnInit {
12+
13+
caseObject:Case|undefined;
14+
selectedSession:Session|undefined;
15+
caseNames:string[] = []
16+
constructor(private aetherOnePiService:AetherOnePiService) { }
17+
18+
ngOnInit(): void {
19+
this.aetherOnePiService.getAllCases().subscribe( c => this.caseNames = c)
20+
}
21+
22+
openCase(c: string) {
23+
this.aetherOnePiService.loadCase(c).subscribe( caseObject => {
24+
this.caseObject = caseObject
25+
})
26+
}
27+
28+
deletCase(c: string) {
29+
30+
}
31+
32+
protected readonly DatePipe = DatePipe;
33+
34+
getCollapseInnerHtml(session: Session, i: number):string {
35+
return `<h4 class="collapseHeader" data-bs-toggle="collapse" href="#session${i}" role="button" aria-expanded="false" aria-controls="session${i}>${session.created}</h4>`
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<p>Welcome to the UI of AetherOnePi!</p>
2+
<p>The UI is served by the AetherOnPi (which is your personal server on your computer). It enhances the functionality with an easier user interface, enabling more functionality suited for professional use.</p>
23
<p>This design will change a lot during development. You can contribute with you ideas, suggestions and bug reports!</p>
34
<hr>
45
<a href="patreon.com/aetherone" target="patreonIsuretPolos" class="btn btn-success btn-sm">Support me on PATREON!<br>And get FREE courses for radionics and homeopathy!</a>

src/main/ui/src/app/services/aether-one-pi.service.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,16 @@ export class AetherOnePiService {
4949
return this.http.get<string[]>(`${this.baseUrl}rates`);
5050
}
5151

52+
getAllCases():Observable<string[]> {
53+
return this.http.get<string[]>(`${this.baseUrl}case`);
54+
}
55+
56+
loadCase(caseName:string):Observable<Case> {
57+
return this.http.get<Case>(`${this.baseUrl}case?name=${caseName}`);
58+
}
59+
5260
getCase():Observable<Case> {
53-
return this.http.get<Case>(`${this.baseUrl}case`);
61+
return this.http.get<Case>(`${this.baseUrl}case/current`);
5462
}
5563

5664
saveCase(caseObject:Case):Observable<void> {

0 commit comments

Comments
 (0)