diff --git a/.gradle/8.0.2/checksums/checksums.lock b/.gradle/8.0.2/checksums/checksums.lock
new file mode 100644
index 0000000..c90f709
Binary files /dev/null and b/.gradle/8.0.2/checksums/checksums.lock differ
diff --git a/.gradle/8.0.2/fileChanges/last-build.bin b/.gradle/8.0.2/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/.gradle/8.0.2/fileChanges/last-build.bin differ
diff --git a/.gradle/8.0.2/fileHashes/fileHashes.lock b/.gradle/8.0.2/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..4f02814
Binary files /dev/null and b/.gradle/8.0.2/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.0.2/gc.properties b/.gradle/8.0.2/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..db5ca62
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 8afefca..509b64e 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,15 @@ OpSo is a Flutter app that provides comprehensive information about various open
+
+
+
License
+
+
+[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
+
+This project is licensed under the [MIT License](./LICENSE).
+
## Contributing to OpSo
Thank you for considering contributing to OpSo! We welcome contributions from the community to help improve the app and add new features. Below are some guidelines for contributing:
diff --git a/assets/coding_ninja_swag.png b/assets/coding_ninja_swag.png
new file mode 100644
index 0000000..55c39f3
Binary files /dev/null and b/assets/coding_ninja_swag.png differ
diff --git a/assets/github_swag.png b/assets/github_swag.png
new file mode 100644
index 0000000..ecdaeba
Binary files /dev/null and b/assets/github_swag.png differ
diff --git a/assets/open_summer_of_code.png b/assets/open_summer_of_code.png
new file mode 100644
index 0000000..a5d2a31
Binary files /dev/null and b/assets/open_summer_of_code.png differ
diff --git a/assets/participation_certificate.png b/assets/participation_certificate.png
new file mode 100644
index 0000000..3c165b2
Binary files /dev/null and b/assets/participation_certificate.png differ
diff --git a/assets/projects/osoc/osoc2021.json b/assets/projects/osoc/osoc2021.json
new file mode 100644
index 0000000..5ec70ed
--- /dev/null
+++ b/assets/projects/osoc/osoc2021.json
@@ -0,0 +1,93 @@
+[
+ {
+ "name": "Reclaim your data",
+ "image_url": "https://osoc.be/editions/2021/projects/reclaim-your-data.svg",
+ "description": "Remember this nice picture your friend shared of you cliff jumping? So does your insurer - and he just raised your premium. WePod is creating a web application that allows you to get back control. Choose who gets to see which pictures and keep the ownership over your data.",
+ "project_url": "https://osoc.be/editions/2021/reclaim-your-data",
+ "year": 2021
+ },
+ {
+ "name": "Crowdy",
+ "image_url": "https://osoc.be/editions/2021/projects/crowdy.svg",
+ "description": "We will build a user-friendly web-app \"crowdedness meter\" to help students meet safely in Ghent hotspots. Our ultimate goal is to offer students the opportunity to reclaim the ownership of their reputation, by demonstrating that it is possible to have a social life while respecting government measures. For students, by students.",
+ "project_url": "https://osoc.be/editions/2021/crowdy",
+ "year": 2021
+ },
+ {
+ "name": "Open Talks",
+ "image_url": "https://osoc.be/editions/2021/projects/open-talks.svg",
+ "description": "Creating, organising and optimising the internal and external communication strategy for #osoc21. The goal is to document and share the experiences of all #osoc21 participants to the world and future students, coaches, sponsors and partners in a successful creative communication campaign on different media platforms.",
+ "project_url": "https://osoc.be/editions/2021/open-talks",
+ "year": 2021
+ },
+ {
+ "name": "Future of Work",
+ "image_url": "https://osoc.be/editions/2021/projects/future-of-work.svg",
+ "description": "Our goal is to create an application that analyzes the inflow and outflow of personnel and creates fancy, useful visualizations.",
+ "project_url": "https://osoc.be/editions/2021/future-of-work",
+ "year": 2021
+ },
+ {
+ "name": "Edubadges (Belgium)",
+ "image_url": "https://osoc.be/editions/2021/projects/edubadges-be.svg",
+ "description": "We will be creating a campaign to successfully bring Edubadges to the Belgian public in the future. The communication plan will inform the viewer about Edubadges and its advantages.",
+ "project_url": "https://osoc.be/editions/2021/edubadges-be",
+ "year": 2021
+ },
+ {
+ "name": "selection-tool",
+ "image_url": "https://osoc.be/editions/2021/projects/selection-tool.svg",
+ "description": "Creating a selection tool for recruiters giving them the opportunity to collaborate in real time while having an overview of all the candidates, resulting in diverse, innovative teams for all orgranisations. Giving orgranisations the opportunity to find the best candidates and match them to the preferred team.",
+ "project_url": "https://osoc.be/editions/2021/selection-tool",
+ "year": 2021
+ },
+ {
+ "name": "Arvesta's Digital Innovation Hackathon",
+ "image_url": "https://osoc.be/editions/2021/projects/arvesta-s-digital-innovation-hackathon.svg",
+ "description": "How to connect the different stakeholders of Arvesta, the largest full-service partner for Belgian farmers and market gardeners? Sharing their knowledge to become more aware, so they can improve their skills and attitudes.",
+ "project_url": "https://osoc.be/editions/2021/arvesta-s-digital-innovation-hackathon",
+ "year": 2021
+ },
+ {
+ "name": "Final Improved String pHarser (FISH)",
+ "image_url": "https://osoc.be/editions/2021/projects/fish.svg",
+ "description": "extract data from scientific references and store it in a usable format. We split strings, containing citations and references, into the correct author, year, journal and publication.",
+ "project_url": "https://osoc.be/editions/2021/fish",
+ "year": 2021
+ },
+ {
+ "name": "Nature moves",
+ "image_url": "https://osoc.be/editions/2021/projects/nature-moves.svg",
+ "description": "Our goal is to build a map visualisation and editing tool to enrich and integrate the Natuurpunt’s nature reserves data into the OSM database, making it both accessible, maintainable, and mobile-friendly.",
+ "project_url": "https://osoc.be/editions/2021/nature-moves",
+ "year": 2021
+ },
+ {
+ "name": "Safe Crossing",
+ "image_url": "https://osoc.be/editions/2021/projects/safe-crossing.svg",
+ "description": "This project is about determining which crosswalk a pedestrian is about to cross with a mobile phone and optionally hardware devices installed on the intersection. Pedestrians and specially blind people are the target audiance for this project.",
+ "project_url": "https://osoc.be/editions/2021/safe-crossing",
+ "year": 2021
+ },
+ {
+ "name": "RoadBase",
+ "image_url": "https://osoc.be/editions/2021/projects/roadbase.svg",
+ "description": "Crowd-sourcing information about road marks in linked open data structure to enable (local) governments, companies & citizens to use and reuse this data, build new applications and create new roads to safety.",
+ "project_url": "https://osoc.be/editions/2021/roadbase",
+ "year": 2021
+ },
+ {
+ "name": "Linked Data Event Streams",
+ "image_url": "https://osoc.be/editions/2021/projects/ldes.svg",
+ "description": "Our goal is to build an SDK to make it easier for Data Publisher/Developers to publish their datasets as Linked Data Event Streams (LDES) and showcase its potential by creating a use-case for public transport services",
+ "project_url": "https://osoc.be/editions/2021/ldes",
+ "year": 2021
+ },
+ {
+ "name": "BikeInfrastructure",
+ "image_url": "https://osoc.be/editions/2021/projects/bikeinfrastructure.svg",
+ "description": "We will build a user-friendly and visually attractive tool to visualize and promote the Open Street Maps data on cycling infrastructure in the province of East-Flanders.",
+ "project_url": "https://osoc.be/editions/2021/bikeinfrastructure",
+ "year": 2021
+ }
+]
diff --git a/assets/projects/osoc/osoc2022.json b/assets/projects/osoc/osoc2022.json
new file mode 100644
index 0000000..b65dd42
--- /dev/null
+++ b/assets/projects/osoc/osoc2022.json
@@ -0,0 +1,72 @@
+[
+ {
+ "name": "Removing Obstacles with Open Data",
+ "image_url": "https://osoc.be/editions/2022/projects/removing-obstacles-with-open-data.svg",
+ "description": "We strive to make the world more accessible for people with a physical disability by creating a web application where public places and data about accessibility will be mapped, so that it will become available to consult, add and analyze.",
+ "project_url": "https://osoc.be/editions/2022/removing-obstacles-with-open-data",
+ "year": 2022
+ },
+ {
+ "name": "The Impact of Sharing Knowledge",
+ "image_url": "https://osoc.be/editions/2022/projects/the-impact-of-sharing-knowledge.svg",
+ "description": "Motivate and inspire researchers to keep sharing their research output and knowledge on knowledge portals such as FRIS and Biblio in a durable, qualitative, sustainable & enthusiastic way.",
+ "project_url": "https://osoc.be/editions/2022/the-impact-of-sharing-knowledge",
+ "year": 2022
+ },
+ {
+ "name": "We spice up your osoc",
+ "image_url": "https://osoc.be/editions/2022/projects/we-spice-up-your-osoc.svg",
+ "description": "We manage internal and external communications of #osoc22 and set up a new branding strategy for #osoc23. We promote this summer programme to future participants and partners.",
+ "project_url": "https://osoc.be/editions/2022/we-spice-up-your-osoc",
+ "year": 2022
+ },
+ {
+ "name": "Powerful Personal Data",
+ "image_url": "https://osoc.be/editions/2022/projects/powerful-personal-data.svg",
+ "description": "We're a team researching and coding to demonstrate how \"taking back control of your personal data\" can really empower everyone in their daily lives.",
+ "project_url": "https://osoc.be/editions/2022/powerful-personal-data",
+ "year": 2022
+ },
+ {
+ "name": "Paradar",
+ "image_url": "https://osoc.be/editions/2022/projects/paradar.svg",
+ "description": "Developing a proof of concept for a tracking app based on physical trackers and smartphones to allow NCCN to track useful resources (VIP, assets, ...) in their internal tools (crisis management, emergency planning, ...)",
+ "project_url": "https://osoc.be/editions/2022/paradar",
+ "year": 2022
+ },
+ {
+ "name": "VAC - Voice Assistant Confidentiality",
+ "image_url": "https://osoc.be/editions/2022/projects/vac-voice-assistant-confidentiality.svg",
+ "description": "VAC - Voice Assistant Confidentiality project aims to deliver offline voice assistant and research use cases with a focus on sexual harassment.",
+ "project_url": "https://osoc.be/editions/2022/vac-voice-assistant-confidentiality",
+ "year": 2022
+ },
+ {
+ "name": "LYNX - Local Linked Taxes",
+ "image_url": "https://osoc.be/editions/2022/projects/lynx-local-linked-taxes.svg",
+ "description": "Informing & involving citizens, organizations, companies and governments with Linked Open Data. With this project, we aim to increase the quality of data about municipal taxes and to open it up.",
+ "project_url": "https://osoc.be/editions/2022/lynx-local-linked-taxes",
+ "year": 2022
+ },
+ {
+ "name": "Pleasant Procedures",
+ "image_url": "https://osoc.be/editions/2022/projects/pleasant-procedures.svg",
+ "description": "We want to develop an easy-to-use web tool for government administrators, with which they can design data-gathering flows for citizens (procedures). For example, a flow for requesting a new identity card.",
+ "project_url": "https://osoc.be/editions/2022/pleasant-procedures",
+ "year": 2022
+ },
+ {
+ "name": "Inspector Widget",
+ "image_url": "https://osoc.be/editions/2022/projects/inspector-widget.svg",
+ "description": "We will make sure that fraud during sales periods won't happen anymore! Our aim is to help FOD Economie inspectors providing them an app that makes sure that prices advertised online are correct based on rules and regulations.",
+ "project_url": "https://osoc.be/editions/2022/inspector-widget",
+ "year": 2022
+ },
+ {
+ "name": "Sphere",
+ "image_url": "https://osoc.be/editions/2022/projects/sphere.svg",
+ "description": "We help first-time home-builders imagine and configure their dream house by providing 3D visualisations.",
+ "project_url": "https://osoc.be/editions/2022/sphere",
+ "year": 2022
+ }
+]
diff --git a/assets/projects/sokde/sokde2022.json b/assets/projects/sokde/sokde2022.json
new file mode 100644
index 0000000..4475f91
--- /dev/null
+++ b/assets/projects/sokde/sokde2022.json
@@ -0,0 +1,52 @@
+[
+ {
+ "title": "Adding new Activity to GCompris",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Samarth_Raj",
+ "mentors": ["Emmanuel Charruau", "Harsh Kumar"],
+ "mentees": ["Samarth Raj"],
+ "year": 2022
+ },
+ {
+ "title": "Rust Wrapper of KConfig",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Ayush_Singh",
+ "mentors": ["Jos van den Oever"],
+ "mentees": ["Ayush Singh"],
+ "year": 2022
+ },
+ {
+ "title": "Adding Perspective Ellipse Assistant Tool in Krita",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Srirupa_Datta",
+ "mentors": ["Halla Rempt"],
+ "mentees": ["Srirupa Datta"],
+ "year": 2022
+ },
+ {
+ "title": "Improving UX for KDE Connect iOS Internal Error and Alerts",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Stefan_Kowalczyk",
+ "mentors": ["Lucas Wang", "Apollo Zhu"],
+ "mentees": ["Stefan Kowalczyk"],
+ "year": 2022
+ },
+ {
+ "title": "Packaging KDE Applications for Flathub",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Snehit_Sah",
+ "mentors": ["Timothée Ravier"],
+ "mentees": ["Snehit Sah"],
+ "year": 2022
+ },
+ {
+ "title": "Permission Management for Flatpak Apps in Discover",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Suhaas_Joshi",
+ "mentors": ["Timothée Ravier", "Aleix Pol"],
+ "mentees": ["Suhaas Joshi"],
+ "year": 2022
+ },
+ {
+ "title": "Preparing Standard Usage Scenarios for Energy Consumption Measurements",
+ "link": "https://community.kde.org/SoK/2022/StatusReport/Karanjot_Singh",
+ "mentors": ["Joseph P. De Veaugh-Geiss"],
+ "mentees": ["Karanjot Singh"],
+ "year": 2022
+ }
+ ]
+
\ No newline at end of file
diff --git a/assets/projects/sokde/sokde2023.json b/assets/projects/sokde/sokde2023.json
new file mode 100644
index 0000000..5ab0ca4
--- /dev/null
+++ b/assets/projects/sokde/sokde2023.json
@@ -0,0 +1,79 @@
+[
+ {
+ "title": "Preparation of KDE apps for Blue Angel eco-certification",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Sustainability_1:_Preparation_of_KDE_apps_for_Blue_Angel_eco-certification",
+ "mentors": ["Joseph P. De Veaugh-Geiss"],
+ "mentees": ["Rudraksh Karpe"],
+ "year": 2023
+ },
+ {
+ "title": "Improve KDE Eco Test emulation tool",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Sustainability_2:_Improve_KDE_Eco_Test_emulation_tool",
+ "mentors": ["Karanjot Singh", "Emmanuel Charruau", "Joseph P. De Veaugh-Geiss"],
+ "mentees": ["Mohammed Ibrahim"],
+ "year": 2023
+ },
+ {
+ "title": "Measurement of energy consumption with Selenium",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Sustainability_3:_Measurement_of_energy_consumption_with_Selenium",
+ "mentors": ["Emmanuel Charruau", "Harald Sitter"],
+ "mentees": ["Nitin Tejuja"],
+ "year": 2023
+ },
+ {
+ "title": "Accessibility and UI testing of Tokodon",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Accessibility_and_UI_testing_of_Tokodon",
+ "mentors": ["Carl Schwan"],
+ "mentees": ["Rishi Kumar"],
+ "year": 2023
+ },
+ {
+ "title": "Improving the accessibility of KDE’s websites",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Improving_the_accessibility_of_KDE.E2.80.99s_websites",
+ "mentors": ["Paul Brown", "Aniqa Khokhar"],
+ "mentees": ["Victoria Chen"],
+ "year": 2023
+ },
+ {
+ "title": "Plasma accessibility widget",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Plasma_accessibility_widget",
+ "mentors": ["Fushan Wen"],
+ "mentees": ["Brent Mackey"],
+ "year": 2023
+ },
+ {
+ "title": "Automate Flatpak checks in GitLab Invent CI",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Automate_Flatpak_checks_in_GitLab_Invent_CI",
+ "mentors": ["Timothée Ravier", "Aleix Pol"],
+ "mentees": ["Neelaksh Singh"],
+ "year": 2023
+ },
+ {
+ "title": "Spectacle: Improving the annotation tools",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Spectacle:_Improving_the_annotation_tools",
+ "mentors": ["Bharadwaj Raju"],
+ "mentees": ["Brannon Aw"],
+ "year": 2023
+ },
+ {
+ "title": "Plasma: Better holiday support in the digital clock widget",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Plasma:_Better_holiday_support_in_the_digital_clock_widget",
+ "mentors": ["Fushan Wen"],
+ "mentees": ["Ruoqing He"],
+ "year": 2023
+ },
+ {
+ "title": "Improving Audiotube",
+ "link": "https://community.kde.org/SoK/Ideas/2023#Improving_Audiotube",
+ "mentors": ["Carl Schwan", "Devin Lin", "Jonah Brüchert"],
+ "mentees": ["Théophile Gilgien"],
+ "year": 2023
+ },
+ {
+ "title": "New epub reader, Arianna",
+ "link": "https://community.kde.org/SoK/Ideas/2023#New_epub_reader.2C_Arianna",
+ "mentors": ["Carl Schwan"],
+ "mentees": ["Arpit Jain"],
+ "year": 2023
+ }
+]
diff --git a/assets/projects/sokde/sokde2024.json b/assets/projects/sokde/sokde2024.json
new file mode 100644
index 0000000..b16e92d
--- /dev/null
+++ b/assets/projects/sokde/sokde2024.json
@@ -0,0 +1,100 @@
+[
+ {
+ "title": "Adding multi-format rendering to Kdenlive",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/5",
+ "mentors": ["Julius Künzel", "Jean-Baptiste Mardelle"],
+ "mentees": ["Ajay Chauhan"],
+ "year": 2024
+ },
+ {
+ "title": "Enabling editing of keyframe curves and advanced keyframe types in Kdenlive",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/4",
+ "mentors": ["Julius Künzel", "Jean-Baptiste Mardelle"],
+ "mentees": ["Iceneko"],
+ "year": 2024
+ },
+ {
+ "title": "Improving KdeEcoTest tool using kwin scripting API and uinput",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/13",
+ "mentors": ["Karanjot Singh", "Emmanuel Charruau"],
+ "mentees": ["Athul Raj Kollareth"],
+ "year": 2024
+ },
+ {
+ "title": "Adding support for Windows in KdeEcoTest",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/17",
+ "mentors": ["Karanjot Singh", "Emmanuel Charruau"],
+ "mentees": ["Amartya Chakraborty"],
+ "year": 2024
+ },
+ {
+ "title": "Testing and development of KEcoLab",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/19",
+ "mentors": ["Nitin Tejuja"],
+ "mentees": ["Sarthak Negi", "Aakarsh MJ"],
+ "year": 2024
+ },
+ {
+ "title": "Selenium automation of energy measurements / accessibility tests for KDE applications",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/14",
+ "mentors": ["Rishi Kumar", "Joseph P. De Veaugh-Geiss"],
+ "mentees": ["Pradyot Ranjan"],
+ "year": 2024
+ },
+ {
+ "title": "Extending embedded documentation for supported Computer Algebra Systems Project",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/6",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Dhairya Majmudar", "Saksham Gupta"],
+ "year": 2024
+ },
+ {
+ "title": "Enhancing Cantor's and LabPlot's documentation by adding QtHelp Conversion and User Accessibility",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/11",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Mahfuza Humayra Mohona"],
+ "year": 2024
+ },
+ {
+ "title": "Integrating KTextEditor into Cantor",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/23",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Anshul Dalal"],
+ "year": 2024
+ },
+ {
+ "title": "Enhancing Cantor with package management capabilities",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/25",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Krish Jain"],
+ "year": 2024
+ },
+ {
+ "title": "Downloading/importing of data sets from kaggle.com",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/9",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Israel Galadima"],
+ "year": 2024
+ },
+ {
+ "title": "Integrating TSDB support to LabPlot",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/29",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Mihir Kumar Singh"],
+ "year": 2024
+ },
+ {
+ "title": "MCAP Support for LabPlot",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/30",
+ "mentors": ["Alexander Semke"],
+ "mentees": ["Raphael Wirth"],
+ "year": 2024
+ },
+ {
+ "title": "Moving brightness control to KWin and adding per-screen brightness control",
+ "link": "https://invent.kde.org/teams/mentor-programs/2024/-/issues/20",
+ "mentors": ["Xaver Hugl"],
+ "mentees": ["Anurag Thakur"],
+ "year": 2024
+ }
+]
diff --git a/assets/sokde.png b/assets/sokde.png
new file mode 100644
index 0000000..2f95d01
Binary files /dev/null and b/assets/sokde.png differ
diff --git a/assets/xyz_domain.png b/assets/xyz_domain.png
new file mode 100644
index 0000000..24a67e9
Binary files /dev/null and b/assets/xyz_domain.png differ
diff --git a/lib/home_page.dart b/lib/home_page.dart
index 57fe0b7..62c226b 100644
--- a/lib/home_page.dart
+++ b/lib/home_page.dart
@@ -11,7 +11,9 @@ import 'package:opso/programs%20screen/google_season_of_docs_screen.dart';
import 'package:opso/programs%20screen/google_summer_of_code_screen.dart';
import 'package:opso/programs%20screen/linux_foundation.dart';
import 'package:opso/programs%20screen/major_league_hacking_fellowship.dart';
+import 'package:opso/programs%20screen/open_summer_of_code.dart';
import 'package:opso/programs%20screen/outreachy.dart';
+import 'package:opso/programs%20screen/season_of_kde.dart';
import 'package:opso/programs%20screen/summer_of_bitcoin.dart';
import 'package:opso/programs%20screen/social_winter_of_code.dart';
import 'package:opso/services/notificationService.dart';
@@ -38,6 +40,7 @@ class _HomePageState extends State {
void initState() {
showNotification();
super.initState();
+
_getInitialThemeMode();
}
@@ -54,6 +57,7 @@ class _HomePageState extends State {
_initialLabelIndex = 0;
}
});
+
}
@@ -109,6 +113,14 @@ class _HomePageState extends State {
title: 'Social Winter of Code',
imageAssetPath: 'assets/swoc.png',
),
+ Program(
+ title: 'Season of KDE',
+ imageAssetPath: 'assets/sokde.png',
+ ),
+ Program(
+ title: 'Open Summer of Code',
+ imageAssetPath: 'assets/open_summer_of_code.png',
+ ),
];
@@ -186,7 +198,10 @@ class _HomePageState extends State {
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
- Icon(FontAwesomeIcons.bars),
+ IconButton(
+ icon: Icon(Icons.close),
+ onPressed: () => Navigator.pop(context),
+ ),
SizedBox(
width: ScreenUtil().setWidth(100),
),
@@ -215,20 +230,15 @@ class _HomePageState extends State {
onTap: () {},
child: ListTile(
leading: Icon(
- _initialLabelIndex == 0
+ AdaptiveTheme.of(context).mode.isDark
? FontAwesomeIcons.solidSun
: FontAwesomeIcons.solidMoon,
),
title: const Text('Switch Theme'),
onTap: () {
setState(() {
- if (_initialLabelIndex == 0) {
- _initialLabelIndex = 1;
- AdaptiveTheme.of(context).setDark();
- } else {
- _initialLabelIndex = 0;
- AdaptiveTheme.of(context).setLight();
- }
+ AdaptiveTheme.of(context)
+ .toggleThemeMode(useSystem: false);
});
},
),
@@ -379,6 +389,15 @@ class _HomePageState extends State {
);
break;
+ case 'Season of KDE':
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => const SeasonOfKDE(),
+ ),
+ );
+ break;
+
case 'Outreachy':
Navigator.push(context,
@@ -388,12 +407,12 @@ class _HomePageState extends State {
case 'Summer of Bitcoin':
Navigator.pushNamed(context, "/summer_of_bitcoin");
+ case 'Open Summer of Code':
- case 'Summer of Bitcoin':
Navigator.push(
context,
MaterialPageRoute(
- builder: (context) => const SummerOfBitcoin(),
+ builder: (context) => const OpenSummerOfCode(),
),
);
@@ -401,6 +420,7 @@ class _HomePageState extends State {
case 'Linux Foundation':
Navigator.push(context,
MaterialPageRoute(builder: (context) => const LinuxFoundation()));
+
default:
break;
}
@@ -503,6 +523,14 @@ class ProgramSearchDelegate extends SearchDelegate {
title: 'Social Winter of Code',
imageAssetPath: 'assets/swoc.png',
),
+ Program(
+ title: 'Season of KDE',
+ imageAssetPath: 'assets/sokde.png',
+ ),
+ Program(
+ title: 'Open Summer of Code',
+ imageAssetPath: 'assets/open_summer_of_code.png',
+ ),
];
@@ -610,6 +638,15 @@ class ProgramSearchDelegate extends SearchDelegate {
);
break;
+ case 'Season of KDE':
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => const SeasonOfKDE(),
+ ),
+ );
+ break;
+
case 'Linux Foundation':
Navigator.push(context,
diff --git a/lib/main.dart b/lib/main.dart
index 87e2cd7..ee6ebe4 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -6,7 +6,9 @@ import 'package:opso/programs%20screen/google_season_of_docs_screen.dart';
import 'package:opso/programs%20screen/google_summer_of_code_screen.dart';
import 'package:opso/programs%20screen/linux_foundation.dart';
import 'package:opso/programs%20screen/major_league_hacking_fellowship.dart';
+import 'package:opso/programs%20screen/open_summer_of_code.dart';
import 'package:opso/programs%20screen/outreachy.dart';
+import 'package:opso/programs%20screen/season_of_kde.dart';
import 'package:opso/programs%20screen/summer_of_bitcoin.dart';
import 'package:opso/programs%20screen/social_winter_of_code.dart';
import 'package:opso/services/notificationService.dart';
@@ -16,12 +18,14 @@ import 'splash_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
+ final savedThemeMode = await AdaptiveTheme.getThemeMode();
await NotificationService.initialNotification();
- runApp(const OpSoApp());
+ runApp(OpSoApp(savedThemeMode: savedThemeMode));
}
class OpSoApp extends StatelessWidget {
- const OpSoApp({super.key});
+ final AdaptiveThemeMode? savedThemeMode;
+ const OpSoApp({super.key, this.savedThemeMode});
@override
Widget build(BuildContext context) {
@@ -33,18 +37,20 @@ class OpSoApp extends StatelessWidget {
return AdaptiveTheme(
light: ThemeData.light(),
dark: ThemeData.dark(),
- initial: AdaptiveThemeMode.system,
+ initial: savedThemeMode ?? AdaptiveThemeMode.light,
builder: (theme, darkTheme) => MaterialApp(
initialRoute: '/splash_screen',
routes: {
"/progarm_page": (context) => const HomePage(),
"/girl_script_summer_of_code": (context) => const GSSOCScreen(),
"/social_winter_of_code": (context) => const SWOCScreen(),
+ "/season_of_sokde":(context) => const SeasonOfKDE(),
"/google_summer_of_code": (context) =>
GoogleSummerOfCodeScreen(),
"/google_season_of_docs": (context) =>
GoogleSeasonOfDocsScreen(),
"/summer_of_bitcoin": (context) => const SummerOfBitcoin(),
+ "/open_summer_of_code": (context) => const OpenSummerOfCode(),
"/outreachy": (context) => const OutReachy(),
"/major_league_hacking_fellowship": (context) =>
const MajorLeagueHackingFellowship(),
diff --git a/lib/modals/osoc_modal.dart b/lib/modals/osoc_modal.dart
new file mode 100644
index 0000000..03bca90
--- /dev/null
+++ b/lib/modals/osoc_modal.dart
@@ -0,0 +1,83 @@
+// ignore_for_file: public_member_api_docs, sort_constructors_first, non_constant_identifier_names
+import 'dart:convert';
+
+class OsocModal {
+ String name = "";
+ String image_url = "";
+ String description = "";
+ String project_url = "";
+ int year = 0;
+ OsocModal({
+ required this.name,
+ required this.image_url,
+ required this.description,
+ required this.project_url,
+ required this.year,
+ });
+
+ OsocModal copyWith({
+ String? name,
+ String? image_url,
+ String? description,
+ String? project_url,
+ int? year,
+ }) {
+ return OsocModal(
+ name: name ?? this.name,
+ image_url: image_url ?? this.image_url,
+ description: description ?? this.description,
+ project_url: project_url ?? this.project_url,
+ year: year ?? this.year,
+ );
+ }
+
+ Map toMap() {
+ return {
+ 'name': name,
+ 'image_url': image_url,
+ 'description': description,
+ 'project_url': project_url,
+ 'year': year,
+ };
+ }
+
+ factory OsocModal.fromMap(Map map) {
+ return OsocModal(
+ name: map['name'] as String,
+ image_url: map['image_url'] as String,
+ description: map['description'] as String,
+ project_url: map['project_url'] as String,
+ year: map['year'] as int,
+ );
+ }
+
+ String toJson() => json.encode(toMap());
+
+ factory OsocModal.fromJson(String source) =>
+ OsocModal.fromMap(json.decode(source) as Map);
+
+ @override
+ String toString() {
+ return 'OsocModal(name: $name, image_url: $image_url, description: $description, project_url: $project_url, year: $year)';
+ }
+
+ @override
+ bool operator ==(covariant OsocModal other) {
+ if (identical(this, other)) return true;
+
+ return other.name == name &&
+ other.image_url == image_url &&
+ other.description == description &&
+ other.project_url == project_url &&
+ other.year == year;
+ }
+
+ @override
+ int get hashCode {
+ return name.hashCode ^
+ image_url.hashCode ^
+ description.hashCode ^
+ project_url.hashCode ^
+ year.hashCode;
+ }
+}
diff --git a/lib/modals/sokde_project_modal.dart b/lib/modals/sokde_project_modal.dart
new file mode 100644
index 0000000..fbb92f0
--- /dev/null
+++ b/lib/modals/sokde_project_modal.dart
@@ -0,0 +1,54 @@
+class SokdeProjectModal {
+ String name;
+ String wiki;
+ List mentees;
+ List mentors;
+ String year;
+
+ SokdeProjectModal({
+ required this.name,
+ required this.wiki,
+ required this.mentees,
+ required this.mentors,
+ required this.year,
+ });
+
+ factory SokdeProjectModal.fromJson(Map json) {
+ List mentorsList = [];
+ if (json['mentors'] is List) {
+ mentorsList = List.from(json['mentors']);
+ } else if (json['mentors'] is String) {
+ mentorsList = [json['mentors']];
+ }
+
+ List menteesList = [];
+ if (json['mentees'] is List) {
+ menteesList = List.from(json['mentees']);
+ } else if (json['mentees'] is String) {
+ menteesList = [json['mentees']];
+ }
+
+ return SokdeProjectModal(
+ name: json['title'],
+ wiki: json['link'],
+ mentors: mentorsList,
+ mentees: menteesList,
+ year: json['year'].toString(), // Ensure year is converted to string if necessary
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'title': name,
+ 'link': wiki,
+ 'mentors': mentors,
+ 'mentees': mentees,
+ 'year': year,
+ };
+ }
+
+ @override
+ String toString() {
+ return 'SokdeProjectModal(name: $name, wiki: $wiki, mentees: $mentees, mentors: $mentors, year: $year)';
+ }
+}
diff --git a/lib/opso_timeline.dart b/lib/opso_timeline.dart
index 7591bba..c66b5de 100644
--- a/lib/opso_timeline.dart
+++ b/lib/opso_timeline.dart
@@ -9,6 +9,12 @@ class OpsoTimeLineScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final List