Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
c0be7552d5 | |||
0a6473aa83 | |||
c02c314725 | |||
695a85b20d | |||
558a2e0507 | |||
7bd329ebef | |||
29a50bb0e7 |
9 changed files with 228 additions and 406 deletions
|
@ -1,22 +1,15 @@
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
branch: Next
|
branch: dev
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: android build
|
- name: build
|
||||||
image: mobiledevops/flutter-sdk-image
|
image: instrumentisto/flutter
|
||||||
commands:
|
commands:
|
||||||
- git clone https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts.git
|
|
||||||
- echo "Entering folder"
|
|
||||||
- cd OpenContacts
|
- cd OpenContacts
|
||||||
- git config --global --add safe.directory /home/mobiledevops/.flutter-sdk
|
- echo "Starting to build..."
|
||||||
- echo "Getting Dependencies"
|
- flutter build --debug
|
||||||
- flutter pub get
|
- name: Deploy
|
||||||
- flutter pub upgrade
|
|
||||||
- echo "Building..."
|
|
||||||
- flutter build apk --debug
|
|
||||||
- echo "Build Completed!"
|
|
||||||
- name: windows build
|
|
||||||
image: debian
|
image: debian
|
||||||
commands:
|
commands:
|
||||||
- echo "Build Sucessful!"
|
- echo "Hello World"
|
11
README.md
11
README.md
|
@ -1,14 +1,17 @@
|
||||||
<img src="https://raw.githubusercontent.com/Mrdabup/OpenContacts/refs/heads/dev/assets/images/logo512.png" width="200"/>
|
<img src="https://raw.githubusercontent.com/Mrdabup/OpenContacts/refs/heads/dev/assets/images/logo512.png" width="200"/>
|
||||||
|
|
||||||
## OpenContacts
|
# OpenContacts
|
||||||
|
|
||||||
A Resonite Contacts App, based on Nutcake's Recon.
|
A Resonite Contacts App, based on Nutcake's Recon.
|
||||||
|
|
||||||
[Get the latest version of OpenContacts here](https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts)
|
[Get the latest version of OpenContacts here](https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts/releases)
|
||||||
|
|
||||||
|
[Available on github too!](https://github.com/Mrdabup/OpenContacts/releases)
|
||||||
|
|
||||||
[Get ReCon here](https://github.com/Nutcake/ReCon)
|
[Get ReCon here](https://github.com/Nutcake/ReCon)
|
||||||
|
|
||||||
# Building
|
|
||||||
|
## Building
|
||||||
|
|
||||||
This is a standard Flutter application, refer to the [Flutter docs](https://docs.flutter.dev/get-started/install) on how to build it.
|
This is a standard Flutter application, refer to the [Flutter docs](https://docs.flutter.dev/get-started/install) on how to build it.
|
||||||
|
|
||||||
|
@ -17,7 +20,7 @@ Currently only Android is fully supported.
|
||||||
The app works on other platforms, though not every feature will be functional.
|
The app works on other platforms, though not every feature will be functional.
|
||||||
For example, notifications are currently not supported on non-android builds.
|
For example, notifications are currently not supported on non-android builds.
|
||||||
|
|
||||||
# Screenshots
|
### Screenshots
|
||||||
TODO: Screenshots!
|
TODO: Screenshots!
|
||||||
|
|
||||||
<!--<img src="https://github.com/Nutcake/ReCon/assets/10452593/a46ccf8a-0a9f-4518-98e6-84fad2d7bf26" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/5d158f58-cd27-4a68-abf3-9068e92b6a82" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/f2ce95ef-e513-46cb-9654-31e74cdc7c09" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/58ef5e5e-1b53-4a47-92f8-bcbcba7a1e86" width=198/>-->
|
<!--<img src="https://github.com/Nutcake/ReCon/assets/10452593/a46ccf8a-0a9f-4518-98e6-84fad2d7bf26" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/5d158f58-cd27-4a68-abf3-9068e92b6a82" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/f2ce95ef-e513-46cb-9654-31e74cdc7c09" width=198/> <img src="https://github.com/Nutcake/ReCon/assets/10452593/58ef5e5e-1b53-4a47-92f8-bcbcba7a1e86" width=198/>-->
|
|
@ -1,3 +0,0 @@
|
||||||
description: This file stores settings for Dart & Flutter DevTools.
|
|
||||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
|
||||||
extensions:
|
|
|
@ -1,4 +1,3 @@
|
||||||
import 'dart:ui';
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:OpenContacts/auxiliary.dart';
|
import 'package:OpenContacts/auxiliary.dart';
|
||||||
import 'package:OpenContacts/clients/session_client.dart';
|
import 'package:OpenContacts/clients/session_client.dart';
|
||||||
|
@ -6,15 +5,9 @@ import 'package:OpenContacts/models/session.dart';
|
||||||
import 'package:OpenContacts/widgets/default_error_widget.dart';
|
import 'package:OpenContacts/widgets/default_error_widget.dart';
|
||||||
import 'package:OpenContacts/widgets/formatted_text.dart';
|
import 'package:OpenContacts/widgets/formatted_text.dart';
|
||||||
import 'package:OpenContacts/widgets/sessions/session_view.dart';
|
import 'package:OpenContacts/widgets/sessions/session_view.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
||||||
import 'package:html/dom.dart' hide Text;
|
|
||||||
import 'package:indexed/indexed.dart';
|
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gradient_borders/gradient_borders.dart';
|
|
||||||
|
|
||||||
class SessionList extends StatefulWidget {
|
class SessionList extends StatefulWidget {
|
||||||
const SessionList({super.key});
|
const SessionList({super.key});
|
||||||
|
@ -81,175 +74,45 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
|
||||||
),
|
),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final session = data[index];
|
final session = data[index];
|
||||||
return Container( //Make this a container, shit doesn't like it when it's a class already
|
return Card(
|
||||||
decoration: const BoxDecoration(
|
elevation: 0,
|
||||||
gradient: LinearGradient(
|
shape: RoundedRectangleBorder(
|
||||||
begin: Alignment.centerLeft,
|
side: BorderSide(
|
||||||
end: Alignment.centerRight,
|
color: Theme.of(context).colorScheme.outline,
|
||||||
colors: <Color>[
|
),
|
||||||
Color.fromARGB(255, 248, 248, 112),
|
borderRadius: BorderRadius.circular(16),
|
||||||
Color.fromARGB(255, 230, 158, 80),
|
|
||||||
]
|
|
||||||
),
|
),
|
||||||
border: GradientBoxBorder(
|
|
||||||
width: 2,
|
|
||||||
gradient: LinearGradient(
|
|
||||||
begin: Alignment.centerLeft,
|
|
||||||
end: Alignment.centerRight,
|
|
||||||
colors: <Color>[
|
|
||||||
Color.fromARGB(255, 248, 248, 112),
|
|
||||||
Color.fromARGB(255, 230, 158, 80),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
),
|
|
||||||
borderRadius: BorderRadius.all( // I wouldn't have known that this was the right way to write
|
|
||||||
Radius.circular(10)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context)
|
Navigator.of(context)
|
||||||
.push(MaterialPageRoute(builder: (context) => SessionView(session: session)));
|
.push(MaterialPageRoute(builder: (context) => SessionView(session: session)));
|
||||||
},
|
},
|
||||||
borderRadius: BorderRadius.circular(16),
|
borderRadius: BorderRadius.circular(16),
|
||||||
child: Indexer(
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Indexed(
|
Expanded(
|
||||||
index: 1,
|
flex: 5,
|
||||||
child: Positioned(
|
child: ClipRRect(
|
||||||
top: 0,
|
borderRadius: BorderRadius.circular(16),
|
||||||
bottom: 80,
|
child: Hero(
|
||||||
left: 0,
|
tag: session.id,
|
||||||
right: 0,
|
child: CachedNetworkImage(
|
||||||
child: ClipRRect(
|
imageUrl: Aux.resdbToHttp(session.thumbnailUrl),
|
||||||
borderRadius: const BorderRadius.only(
|
fit: BoxFit.cover,
|
||||||
topLeft: Radius.circular(10),
|
errorWidget: (context, url, error) => const Center(
|
||||||
topRight: Radius.circular(10),
|
child: Icon(
|
||||||
),
|
|
||||||
child: Hero(
|
|
||||||
tag: session.id,
|
|
||||||
child: CachedNetworkImage(
|
|
||||||
imageUrl: Aux.resdbToHttp(session.thumbnailUrl),
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
errorWidget:(context, url, error) => const Center(
|
|
||||||
child: Icon(
|
|
||||||
Icons.broken_image,
|
Icons.broken_image,
|
||||||
size: 64,
|
size: 64,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
placeholder: (context, url) =>
|
placeholder: (context, uri) =>
|
||||||
const Center(child: CircularProgressIndicator(),
|
const Center(child: CircularProgressIndicator()),
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Indexed(
|
Expanded(
|
||||||
index: 2,
|
|
||||||
child: Positioned(
|
|
||||||
top: 160,
|
|
||||||
bottom: 0,
|
|
||||||
left: 0,
|
|
||||||
right: 0,
|
|
||||||
child: Container(
|
|
||||||
width: 200,
|
|
||||||
height: 50,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.only(
|
|
||||||
bottomLeft: Radius.circular(10),
|
|
||||||
bottomRight: Radius.circular(10),
|
|
||||||
),
|
|
||||||
color: Theme.of(context).colorScheme.onPrimary,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Indexed(
|
|
||||||
index: 3,
|
|
||||||
child: Positioned(
|
|
||||||
top: 140,
|
|
||||||
bottom: 75,
|
|
||||||
left: 0,
|
|
||||||
right: 100,
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Theme.of(context).colorScheme.onPrimary,
|
|
||||||
borderRadius: BorderRadius.only(
|
|
||||||
topRight: Radius.circular(10)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const Indexed(
|
|
||||||
index: 4,
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
SizedBox(
|
|
||||||
height: 130,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child:Icon(
|
|
||||||
Icons.group
|
|
||||||
)
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 15,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Icon(
|
|
||||||
Icons.dns
|
|
||||||
)
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
), //Due to some limitations, Icons and Texts are on different layers
|
|
||||||
Indexed(
|
|
||||||
index: 5,
|
|
||||||
child: Column(
|
|
||||||
//mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
const SizedBox(
|
|
||||||
height: 143,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
" ${(session.sessionUsers.length - (session.headlessHost? 1 : 0)).toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")}",
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 20,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: FormattedText(
|
|
||||||
//textAlign: Align(1,1),
|
|
||||||
session.formattedName,
|
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
" ${session.hostUsername}",
|
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 20,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
|
|
||||||
)
|
|
||||||
]
|
|
||||||
),
|
|
||||||
/*child: Column(
|
|
||||||
Expanded( //2
|
|
||||||
flex: 2,
|
flex: 2,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
|
padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 16),
|
||||||
|
@ -292,7 +155,7 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
"${(session.sessionUsers.length - (session.headlessHost? 1 : 0)).toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")} Online",
|
"${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")} Online",
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||||
|
@ -310,7 +173,7 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),*/
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,7 +31,7 @@ class _SessionListAppBarState extends State<SessionListAppBar> {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.filter_list),
|
icon: const Icon(Icons.filter_alt_outlined),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -162,7 +162,7 @@ class _SessionViewState extends State<SessionView> {
|
||||||
ListSectionHeader(
|
ListSectionHeader(
|
||||||
leadingText: "Users",
|
leadingText: "Users",
|
||||||
trailingText:
|
trailingText:
|
||||||
"${(session.sessionUsers.length - (session.headlessHost? 1 : 0)).toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")}", //TODO: Find a way to make it so that inactive users do not count
|
"${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")}",
|
||||||
showLine: false,
|
showLine: false,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -92,7 +92,7 @@ class SettingsPage extends StatelessWidget {
|
||||||
child: Container(
|
child: Container(
|
||||||
margin: const EdgeInsets.all(16),
|
margin: const EdgeInsets.all(16),
|
||||||
constraints: const BoxConstraints(maxWidth: 64),
|
constraints: const BoxConstraints(maxWidth: 64),
|
||||||
child: Image.asset("assets/images/logo512.png"),
|
child: Image.asset("assets/images/testingIcon512.png"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
applicationLegalese: "ReCon by Nutcake, OpenContacts by ThatOneJackalGuy. Both apps made with <3",
|
applicationLegalese: "ReCon by Nutcake, OpenContacts by ThatOneJackalGuy. Both apps made with <3",
|
||||||
|
|
404
pubspec.lock
404
pubspec.lock
File diff suppressed because it is too large
Load diff
|
@ -65,8 +65,6 @@ dependencies:
|
||||||
share_plus: ^7.1.0
|
share_plus: ^7.1.0
|
||||||
ffmpeg_kit_flutter_audio: ^6.0.3
|
ffmpeg_kit_flutter_audio: ^6.0.3
|
||||||
background_downloader: ^7.12.2
|
background_downloader: ^7.12.2
|
||||||
indexed: ^0.0.8
|
|
||||||
gradient_borders: ^1.0.1
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
Loading…
Reference in a new issue