1 Commits

Author SHA1 Message Date
64af64f28b Merge pull request 'V.1.2.6' (#16) from V.1.2.6 into main
Reviewed-on: #16
2026-02-25 09:30:49 +00:00
18 changed files with 17 additions and 154 deletions

View File

@@ -48,15 +48,13 @@ origins = [
"http://MIH-API-Hub",
"http://api.mzansi-innovation-hub.co.za",
"http://app.mzansi-innovation-hub.co.za",
"https://api.mzansi-innovation-hub.co.za",
"https://app.mzansi-innovation-hub.co.za",
]
init(
app_info=InputAppInfo(
app_name="Mzansi Innovation Hub",
api_domain="http://localhost:8080/",
website_domain="https://app.mzansi-innovation-hub.co.za",
website_domain="http://app.mzansi-innovation-hub.co.za",
api_base_path="/auth",
website_base_path="/auth"
),

View File

@@ -20,15 +20,7 @@ abstract class AppEnviroment {
switch (env) {
case Enviroment.dev:
{
if (kIsWeb) {
//================= Web Dev Urls =================
baseAppUrl = "http://localhost:80";
baseApiUrl = "http://localhost:8080";
baseFileUrl = "http://localhost:9000";
baseAiUrl = "http://localhost:11434";
bannerAdUnitId = 'ca-app-pub-3940256099942544/2435281174'; // IOS ID
break;
} else if (Platform.isIOS || Platform.isLinux) {
if (kIsWeb || Platform.isIOS || Platform.isLinux) {
//================= Web Dev Urls =================
baseAppUrl = "http://localhost:80";
baseApiUrl = "http://localhost:8080";

View File

@@ -2,7 +2,6 @@ import 'dart:io';
import 'package:country_code_picker/country_code_picker.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:geolocator/geolocator.dart';
@@ -454,8 +453,7 @@ class _PackageToolOneState extends State<PackageToolOne> {
),
],
),
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS))
MihBannerAd(),
if (Platform.isAndroid || Platform.isIOS) MihBannerAd(),
const SizedBox(height: 10),
Divider(
color: MihColors.getSecondaryColor(

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:ken_logger/ken_logger.dart';
@@ -102,7 +101,7 @@ class _MihPackageState extends State<MihPackage>
// _peakAnimation();
// });
// }
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
if (Platform.isAndroid || Platform.isIOS) {
// Trigger the peak animation only AFTER the route transition is complete
WidgetsBinding.instance.addPostFrameCallback((_) {
final ModalRoute? currentRoute = ModalRoute.of(context);

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/main.dart';
@@ -160,7 +159,7 @@ class _CurrencyExchangeRateState extends State<CurrencyExchangeRate> {
),
SizedBox(height: 10),
Consumer(builder: (context, bannerAdDisplay, child) {
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
if (Platform.isAndroid || Platform.isIOS) {
return MihBannerAd();
} else {
return const SizedBox(height: 0);

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_package_components/mih_banner_ad.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
@@ -232,7 +231,7 @@ class _TipCalcState extends State<TipCalc> {
),
SizedBox(height: 10),
Consumer(builder: (context, bannerAdDisplay, child) {
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
if (Platform.isAndroid || Platform.isIOS) {
return MihBannerAd();
} else {
return const SizedBox(height: 0);

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@@ -853,7 +852,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
],
),
),
_timer != null && !kIsWeb && (Platform.isAndroid || Platform.isIOS)
_timer != null && (Platform.isAndroid || Platform.isIOS)
? MihBannerAd()
: SizedBox(),
SizedBox(height: 15),

View File

@@ -129,7 +129,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
}
if (textToSpeak != null) {
if (!kIsWeb && Platform.isLinux) {
if (Platform.isLinux) {
// Linux Workaround: Use Speech Dispatcher (standard on most distros)
// '-t female1' is optional for voice variety
Process.run('spd-say', [textToSpeak]);
@@ -204,7 +204,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
// }
void stopTTS(MzansiAiProvider aiProvider) {
if (!kIsWeb && Platform.isLinux) {
if (Platform.isLinux) {
Process.run('spd-say', ['-S']); // The -S flag stops current speech
} else {
_flutterTts.stop();
@@ -213,7 +213,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
}
Future<void> initTts(MzansiAiProvider aiProvider) async {
if (!kIsWeb && Platform.isLinux) return;
if (Platform.isLinux) return;
try {
await _flutterTts.setSpeechRate(!kIsWeb ? 0.55 : 1);
// await _flutterTts.setLanguage("en-US");
@@ -284,7 +284,7 @@ class _MihAiChatState extends State<MihAiChat> with WidgetsBindingObserver {
@override
void dispose() {
if (!kIsWeb && !Platform.isLinux) {
if (!Platform.isLinux) {
_flutterTts.stop();
}
WidgetsBinding.instance.removeObserver(this);

View File

@@ -547,7 +547,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
),
),
SizedBox(height: 10),
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) MihBannerAd()
if (Platform.isAndroid || Platform.isIOS) MihBannerAd()
// MihBannerAd(),
],
),

View File

@@ -30,7 +30,7 @@ class MihBannerAdProvider extends ChangeNotifier {
}
void loadBannerAd() {
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
if (Platform.isAndroid || Platform.isIOS) {
if (bannerAd != null) {
bannerAd!.dispose();
bannerAd = null;

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/main.dart';
@@ -137,7 +136,7 @@ class MihAlertServices {
),
const SizedBox(height: 15),
Text(
!kIsWeb && Platform.isLinux
Platform.isLinux
? "To get the most out of MIH, we need your location. Please go to your System Settings and enable location services. Once you do that, we can start showing you relevant information based on your location."
: "To get the most out of MIH, we need your location. Please go to the site settings of the app and enable location services. Once you do that, we can start showing you relevant information based on your location.",
style: TextStyle(

View File

@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
@@ -17,7 +16,7 @@ class MIHLocationAPI {
///if user has granted permission (while in use), function will return Position object.
Future<Position?> getGPSPosition(BuildContext context) async {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled && !kIsWeb && Platform.isLinux) {
if (!serviceEnabled && Platform.isLinux) {
// Direct the user to their System Settings
MihAlertServices().locationPermissionAlert(context);
return null;

View File

@@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
# The name of the executable created for the application. Change this to change
# the on-disk name of your application.
set(BINARY_NAME "mzansi_innovation_hub")
set(BINARY_NAME "patient_manager")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "za.co.mzansiinnovationhub.mih")
set(APPLICATION_ID "com.example.patient_manager")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

View File

@@ -1,12 +0,0 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=MIH
GenericName=Mzansi Innovation Hub
Comment=Mzansi Innovation Hub official application
Exec=mzansi_innovation_hub
Icon=za.co.mzansiinnovationhub.mih
Terminal=false
Categories=Utility;
Keywords=MIH;Mzansi;Innovation;Hub;
StartupWMClass=mzansi_innovation_hub

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>za.co.mzansiinnovationhub.mih</id>
<name>MIH</name>
<summary>Innovation tools and services for the Mzansi ecosystem</summary>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0</project_license>
<developer_name>Mzansi Innovation Hub</developer_name>
<description>
<p>
MIH (Mzansi Innovation Hub) is a modern desktop application designed to provide
innovation tools and services for users. Built with Flutter, it offers a
high-performance, responsive interface tailored for the Linux desktop.
</p>
<ul>
<li>Access professional innovation resources</li>
<li>Streamlined user interface for efficiency</li>
<li>Native integration with Linux desktop environments</li>
</ul>
</description>
<launchable type="desktop-id">za.co.mzansiinnovationhub.mih.desktop</launchable>
<screenshots>
<screenshot type="default">
<caption>The main dashboard of the MIH application.</caption>
<image>https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project/raw/main/screenshots/main.png</image>
</screenshot>
</screenshots>
<url type="homepage">https://mzansi-innovation-hub.co.za/</url>
<url type="bugtracker">https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project/issues</url>
<provides>
<binary>mzansi_innovation_hub</binary>
</provides>
<releases>
<release version="1.0.0" date="2026-02-26"/>
</releases>
<content_rating type="oars-1.1"/>
<categories>
<category>Utility</category>
</categories>
</component>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

View File

@@ -1,55 +0,0 @@
id: za.co.mzansiinnovationhub.mih
runtime: org.freedesktop.Platform
runtime-version: '24.08'
sdk: org.freedesktop.Sdk
command: mzansi_innovation_hub
finish-args:
- --share=ipc
- --share=network # Added for Internet access
- --socket=fallback-x11
- --socket=wayland
- --device=dri
# Removed --filesystem=home for better security; add back only if strictly needed.
modules:
- name: mzansi-innovation-hub
buildsystem: simple
sources:
- type: archive
url: https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project/releases/download/linux/mzansi_innovation_hub.tar.gz
sha256: b8c383f4d43e2de36b4e6520c9745e3f8e8618bdb9ef6024ad0bf260061137a9
# If the tarball contains a top-level folder (like 'bundle'),
# flatpak-builder enters it automatically.
# If it doesn't, we use the commands below to find them.
- type: file
path: za.co.mzansiinnovationhub.mih.desktop
- type: file
path: za.co.mzansiinnovationhub.mih.metainfo.xml
- type: file
path: za.co.mzansiinnovationhub.mih.png
build-commands:
# 1. Create the necessary directories
- mkdir -p /app/bin /app/share/applications /app/share/icons/hicolor/256x256/apps /app/share/metainfo
# 2. Move EVERYTHING from your archive into /app/bin/
# We use 'find' to move only the app-related files and avoid the metadata files
- |
find . -mindepth 1 -maxdepth 2 \
! -name "*.desktop" \
! -name "*.xml" \
! -name "*.png" \
! -name "*.yml" \
-exec cp -R -t /app/bin/ {} +
# 3. Ensure the binary is in the right place and executable
# If the binary ended up in a subfolder, this moves it to the top of /app/bin
- find /app/bin -name "mzansi_innovation_hub" -type f -exec mv {} /app/bin/ \;
- chmod +x /app/bin/mzansi_innovation_hub
# 4. Install Metadata (using the exact local files)
- install -Dm644 za.co.mzansiinnovationhub.mih.desktop /app/share/applications/za.co.mzansiinnovationhub.mih.desktop
- install -Dm644 za.co.mzansiinnovationhub.mih.png /app/share/icons/hicolor/256x256/apps/za.co.mzansiinnovationhub.mih.png
- install -Dm644 za.co.mzansiinnovationhub.mih.metainfo.xml /app/share/metainfo/za.co.mzansiinnovationhub.mih.metainfo.xml