Compare commits

..

20 commits
main ... Next

Author SHA1 Message Date
9a548ae038 Next Session List removed
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-11-29 16:53:23 -04:00
d28e5f1197 Rework of Sessions Part 1: Done
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-11-29 16:51:14 -04:00
6d21d6a4e6 Test
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-11-02 16:54:09 -04:00
add694b0e0 Test
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-11-02 16:44:09 -04:00
7c04f0304f Next
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-11-02 16:29:03 -04:00
79cdb5a099 Next: UI 2024-11-02 13:30:52 -04:00
8c5e461871 Final Test
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:19:41 -04:00
385114350a Will this work?
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:16:20 -04:00
944eaa086d Idk why it doesn't work
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:11:21 -04:00
23a2a6b8c8 Working on woodpecker, hopefully it works
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:10:15 -04:00
c9debf9299 tEST
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:08:58 -04:00
040e92dfe5 aa
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:08:04 -04:00
471c980d66 a
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 21:00:55 -04:00
73660406aa Tesy
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 20:52:59 -04:00
e16e3731c0 Testing
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-24 20:40:32 -04:00
60ad17916f Packages upgraded
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-19 17:13:00 -04:00
3bfba81d0c Last test
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-19 16:48:03 -04:00
aa876967b6 Test
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2024-10-19 16:46:11 -04:00
c5888d1f33 Test 2024-10-19 16:23:39 -04:00
f2408b0c64 Logo change on settings, ooops
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2024-10-17 21:28:57 -04:00
9 changed files with 406 additions and 228 deletions

View file

@ -1,15 +1,22 @@
when: when:
- event: push - event: push
branch: dev branch: Next
steps: steps:
- name: build - name: android build
image: instrumentisto/flutter image: mobiledevops/flutter-sdk-image
commands: commands:
- git clone https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts.git
- echo "Entering folder"
- cd OpenContacts - cd OpenContacts
- echo "Starting to build..." - git config --global --add safe.directory /home/mobiledevops/.flutter-sdk
- flutter build --debug - echo "Getting Dependencies"
- name: Deploy - flutter pub get
- flutter pub upgrade
- echo "Building..."
- flutter build apk --debug
- echo "Build Completed!"
- name: windows build
image: debian image: debian
commands: commands:
- echo "Hello World" - echo "Build Sucessful!"

View file

@ -1,17 +1,14 @@
<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/releases) [Get the latest version of OpenContacts here](https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts)
[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.
@ -20,7 +17,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/>-->

3
devtools_options.yaml Normal file
View file

@ -0,0 +1,3 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:

View file

@ -1,3 +1,4 @@
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';
@ -5,9 +6,15 @@ 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});
@ -74,45 +81,175 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
), ),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final session = data[index]; final session = data[index];
return Card( return Container( //Make this a container, shit doesn't like it when it's a class already
elevation: 0, decoration: const BoxDecoration(
shape: RoundedRectangleBorder( gradient: LinearGradient(
side: BorderSide( begin: Alignment.centerLeft,
color: Theme.of(context).colorScheme.outline, end: Alignment.centerRight,
), colors: <Color>[
borderRadius: BorderRadius.circular(16), Color.fromARGB(255, 248, 248, 112),
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: Column( child: Indexer(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Indexed(
flex: 5, index: 1,
child: ClipRRect( child: Positioned(
borderRadius: BorderRadius.circular(16), top: 0,
child: Hero( bottom: 80,
tag: session.id, left: 0,
child: CachedNetworkImage( right: 0,
imageUrl: Aux.resdbToHttp(session.thumbnailUrl), child: ClipRRect(
fit: BoxFit.cover, borderRadius: const BorderRadius.only(
errorWidget: (context, url, error) => const Center( topLeft: Radius.circular(10),
child: Icon( topRight: Radius.circular(10),
),
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, uri) => placeholder: (context, url) =>
const Center(child: CircularProgressIndicator()), const Center(child: CircularProgressIndicator(),
),
),
), ),
), ),
), ),
), ),
Expanded( Indexed(
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),
@ -155,7 +292,7 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
"${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")} Online", "${(session.sessionUsers.length - (session.headlessHost? 1 : 0)).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(
@ -173,7 +310,7 @@ class _SessionListState extends State<SessionList> with AutomaticKeepAliveClient
), ),
) )
], ],
), ),*/
), ),
); );
}, },

View file

@ -31,7 +31,7 @@ class _SessionListAppBarState extends State<SessionListAppBar> {
), ),
); );
}, },
icon: const Icon(Icons.filter_alt_outlined), icon: const Icon(Icons.filter_list),
), ),
) )
], ],

View file

@ -162,7 +162,7 @@ class _SessionViewState extends State<SessionView> {
ListSectionHeader( ListSectionHeader(
leadingText: "Users", leadingText: "Users",
trailingText: trailingText:
"${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")}", "${(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
showLine: false, showLine: false,
), ),
], ],

View file

@ -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/testingIcon512.png"), child: Image.asset("assets/images/logo512.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",

File diff suppressed because it is too large Load diff

View file

@ -65,6 +65,8 @@ 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: