Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/WS Control #9

Merged
merged 22 commits into from
Oct 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,9 @@ jobs:
releaseFiles: build/app/outputs/bundle/release/app-release.aab
debugSymbols: build/app/intermediates/merged_native_libs/release/out/lib
track: production
- name: Archive android app file.
uses: actions/upload-artifact@v4
with:
name: openshock.aab
path: build/app/outputs/bundle/release/app-release.aab

6 changes: 6 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import 'package:open_shock/screens/SplashScreen.dart';
import 'package:open_shock/store/AppStore.dart';
import 'package:open_shock/utils/AppTheme.dart';
import 'package:open_shock/utils/OpenShockAPI.dart';
import 'package:open_shock/utils/OpenShockWS.dart';

AppStore appStore = AppStore();
late Openshockapi clientApi; // Declare your global API client object
OpenshockWS? clientWs;

late SelfUser user; // Declare global user objec
final appVersion = '1.0.3';
Expand Down Expand Up @@ -40,6 +42,10 @@ void main() async {
runApp(const MyApp());
}

String GetUserAgent() {
return 'OpenShockMobile ${!isMobile ? ' ${platformName()}' : ''}/${appVersion}';
}

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

Expand Down
39 changes: 39 additions & 0 deletions lib/model/shockobjs/BaseShocker.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import 'package:open_shock/utils/OpenShockAPI.dart';
import 'package:open_shock/utils/OpenShockWS.dart';

abstract class BaseShocker {
final String id;
final String name;
final bool isPaused;

BaseShocker({
required this.id,
required this.name,
required this.isPaused,
});

Future<bool> shock(Openshockapi api, int intensity, int duration) async {
return api.sendControlSignal(this.id, intensity, duration, "Shock");
}

Future<bool> beep(Openshockapi api, int intensity, int duration) async {
return api.sendControlSignal(this.id, intensity, duration, "Sound");
}

Future<bool> vibrate(Openshockapi api, int intensity, int duration) async {
return api.sendControlSignal(this.id, intensity, duration, "Vibrate");
}

Future<bool> shockWS(OpenshockWS socket, int intensity, int duration) async {
return socket.sendControlSignal(this.id, intensity, duration, 1);
}

Future<bool> beepWS(OpenshockWS socket, int intensity, int duration) async {
return socket.sendControlSignal(this.id, intensity, duration, 3);
}

Future<bool> vibrateWS(
OpenshockWS socket, int intensity, int duration) async {
return socket.sendControlSignal(this.id, intensity, duration, 2);
}
}
29 changes: 6 additions & 23 deletions lib/model/shockobjs/OwnShocker.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import 'package:open_shock/utils/OpenShockAPI.dart';
import 'BaseShocker.dart';

class OwnShocker {
final String id;
final String name;
class OwnShocker extends BaseShocker {
final String createdOn;
final bool isPaused;

// Constructor with named parameters
OwnShocker({
required this.id,
required this.name,
required String id,
required String name,
required this.createdOn,
required this.isPaused,
});
required bool isPaused,
}) : super(id: id, name: name, isPaused: isPaused);

// Factory constructor to create an instance from JSON
factory OwnShocker.fromJson(Map<String, dynamic> json) {
return OwnShocker(
id: json['id'] as String,
Expand All @@ -23,16 +18,4 @@ class OwnShocker {
isPaused: json['isPaused'] as bool,
);
}

Future<bool> shock(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Shock");
}

Future<bool> beep(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Sound");
}

Future<bool> vibrate(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Vibrate");
}
}
27 changes: 6 additions & 21 deletions lib/model/shockobjs/SharedUserShocker.dart
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
import 'package:open_shock/utils/OpenShockAPI.dart';
import 'BaseShocker.dart';

class SharedUserShocker {
final String id;
final String name;
final bool isPaused;
class SharedUserShocker extends BaseShocker {
final Map<String, bool> permissions;
final Map<String, dynamic> limits;

SharedUserShocker({
required this.id,
required this.name,
required this.isPaused,
required String id,
required String name,
required bool isPaused,
required this.permissions,
required this.limits,
});
}) : super(id: id, name: name, isPaused: isPaused);

factory SharedUserShocker.fromJson(Map<String, dynamic> json) {
return SharedUserShocker(
Expand All @@ -30,16 +27,4 @@ class SharedUserShocker {
.map((json) => SharedUserShocker.fromJson(json as Map<String, dynamic>))
.toList();
}

Future<bool> shock(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Shock");
}

Future<bool> beep(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Sound");
}

Future<bool> vibrate(Openshockapi api, int int, int dur) async {
return api.sendControlSignal(this.id, int, dur, "Vibrate");
}
}
19 changes: 19 additions & 0 deletions lib/model/shockobjs/ShockerLogEntry.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class ShockerLogEntry {
final String action; // Shock, Vibrate, Sound
final double duration; // Duration in seconds
final String shockerId; // Shocker ID
final int intensity; // Intensity
final String name; // Person who triggered it
final String imageUrl; // Image of the person
final String? customName; // Optional custom name

ShockerLogEntry({
required this.action,
required this.duration,
required this.shockerId,
required this.intensity,
required this.name,
required this.imageUrl,
this.customName,
});
}
3 changes: 3 additions & 0 deletions lib/screens/DashboardScreen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:open_shock/component/BottomNavbarWidget.dart';
import 'package:open_shock/fragments/CreatePairFragment.dart';
import 'package:open_shock/fragments/HomeFragment.dart';
import 'package:open_shock/fragments/SharedUsersFragment.dart';
import 'package:open_shock/main.dart';
import 'package:open_shock/utils/AppColors.dart';

class DashboardScreen extends StatefulWidget {
Expand All @@ -26,6 +27,8 @@ class DashboardScreenState extends State<DashboardScreen> {
void initState() {
super.initState();
init();

clientWs!.startConnection();
}

Future<void> init() async {
Expand Down
Loading
Loading