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
8 changed files with 402 additions and 221 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!"

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: