Added AppViews
This commit is contained in:
parent
2c011a6c34
commit
558a9abecc
5
apps/__init__.py
Normal file
5
apps/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .apps import Apps
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"Apps"
|
||||||
|
]
|
358
apps/apps.py
Normal file
358
apps/apps.py
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView, Title
|
||||||
|
from modules.settings import config
|
||||||
|
from modules.home import AppRow
|
||||||
|
|
||||||
|
|
||||||
|
def Apps(page: ft.Page):
|
||||||
|
AppRow.controls = []
|
||||||
|
appsContainer = ft.ListView(
|
||||||
|
expand=True,
|
||||||
|
)
|
||||||
|
appList = ft.Container(
|
||||||
|
content=ft.Column(
|
||||||
|
controls=[],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
appsContainer.controls.append(
|
||||||
|
appList,
|
||||||
|
)
|
||||||
|
if config.getint('apps', 'dhiraagu') == 1:
|
||||||
|
appList.content.controls.append(
|
||||||
|
ft.Card(
|
||||||
|
content=ft.Container(
|
||||||
|
ink=True,
|
||||||
|
content=ft.Column(
|
||||||
|
[
|
||||||
|
ft.ListTile(
|
||||||
|
leading=ft.Image(
|
||||||
|
border_radius=ft.border_radius.all(10),
|
||||||
|
fit=ft.ImageFit.CONTAIN,
|
||||||
|
src='https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png',
|
||||||
|
),
|
||||||
|
title=ft.Text('Dhiraagu'),
|
||||||
|
subtitle=ft.Text(
|
||||||
|
'An ISP Service.',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
padding=10,
|
||||||
|
on_click=lambda _: page.go('/apps/dhiraagu'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
AppRow.controls.append(
|
||||||
|
ft.Text('Dhiraagu')
|
||||||
|
)
|
||||||
|
AppRow.controls.append(
|
||||||
|
ft.Container(
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
||||||
|
border_radius=10,
|
||||||
|
content=ft.Row(
|
||||||
|
[
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.ACCOUNT_BOX, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Gift",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.ELECTRIC_BOLT, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Reload",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.DASHBOARD, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Usage",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.RECEIPT, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Bills",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
alignment=ft.MainAxisAlignment.CENTER,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if config.getint('apps', 'ooredoo') == 1:
|
||||||
|
appList.content.controls.append(
|
||||||
|
ft.Card(
|
||||||
|
content=ft.Container(
|
||||||
|
ink=True,
|
||||||
|
content=ft.Column(
|
||||||
|
[
|
||||||
|
ft.ListTile(
|
||||||
|
leading=ft.Image(
|
||||||
|
border_radius=ft.border_radius.all(10),
|
||||||
|
fit=ft.ImageFit.CONTAIN,
|
||||||
|
src='https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg',
|
||||||
|
),
|
||||||
|
title=ft.Text('Ooredoo'),
|
||||||
|
subtitle=ft.Text(
|
||||||
|
'An ISP Service.',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
padding=10,
|
||||||
|
on_click=lambda _: page.go('/apps/ooredoo'),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AppRow.controls.append(
|
||||||
|
ft.Text('Ooredoo')
|
||||||
|
)
|
||||||
|
AppRow.controls.append(
|
||||||
|
ft.Container(
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
||||||
|
border_radius=10,
|
||||||
|
content=ft.Row(
|
||||||
|
[
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.SETTINGS_PHONE, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Add-ons",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.ELECTRIC_BOLT, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Raastas",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.DASHBOARD, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Balance",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
ft.Column(
|
||||||
|
controls=[
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(ft.icons.RECEIPT, color=ft.colors.WHITE),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=None,
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Text("Bills",text_align=ft.TextAlign.CENTER),
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
width=80
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
alignment=ft.MainAxisAlignment.CENTER,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if config.getint('apps', 'mwsc') == 1:
|
||||||
|
appList.content.controls.append(
|
||||||
|
ft.Card(
|
||||||
|
content=ft.Container(
|
||||||
|
ink=True,
|
||||||
|
content=ft.Column(
|
||||||
|
[
|
||||||
|
ft.ListTile(
|
||||||
|
leading=ft.Image(
|
||||||
|
border_radius=ft.border_radius.all(10),
|
||||||
|
fit=ft.ImageFit.CONTAIN,
|
||||||
|
src='https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg',
|
||||||
|
),
|
||||||
|
title=ft.Text('MWSC'),
|
||||||
|
subtitle=ft.Text(
|
||||||
|
'Water Bills',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
padding=10,
|
||||||
|
on_click=lambda _: page.go('/apps/mwsc'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if config.getint('apps', 'stelco') == 1:
|
||||||
|
appList.content.controls.append(
|
||||||
|
ft.Card(
|
||||||
|
content=ft.Container(
|
||||||
|
ink=True,
|
||||||
|
content=ft.Column(
|
||||||
|
[
|
||||||
|
ft.ListTile(
|
||||||
|
leading=ft.Image(
|
||||||
|
border_radius=ft.border_radius.all(10),
|
||||||
|
fit=ft.ImageFit.CONTAIN,
|
||||||
|
src='https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png',
|
||||||
|
),
|
||||||
|
title=ft.Text('STELCO'),
|
||||||
|
subtitle=ft.Text(
|
||||||
|
'Electricity Bills',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
padding=10,
|
||||||
|
on_click=lambda _:page.go('/apps/stelco'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if config.getint('apps', 'medianet') == 1:
|
||||||
|
appList.content.controls.append(
|
||||||
|
ft.Card(
|
||||||
|
content=ft.Container(
|
||||||
|
ink=True,
|
||||||
|
content=ft.Column(
|
||||||
|
[
|
||||||
|
ft.ListTile(
|
||||||
|
leading=ft.Image(
|
||||||
|
border_radius=ft.border_radius.all(10),
|
||||||
|
fit=ft.ImageFit.CONTAIN,
|
||||||
|
src='https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg',
|
||||||
|
),
|
||||||
|
title=ft.Text('Dhiraagu'),
|
||||||
|
subtitle=ft.Text(
|
||||||
|
'Online Television Service',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
padding=10,
|
||||||
|
on_click=lambda _: page.go('/apps/medianet'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
return AppView(
|
||||||
|
'/apps',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/'),
|
||||||
|
),
|
||||||
|
title=ft.Text(Title(str(__file__))),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
appsContainer
|
||||||
|
],
|
||||||
|
)
|
13
apps/plugins/__init__.py
Normal file
13
apps/plugins/__init__.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from .dhiraagu import Dhiraagu
|
||||||
|
from .ooredoo import Ooredoo
|
||||||
|
from .medianet import Medianet
|
||||||
|
from .mwsc import Mwsc
|
||||||
|
from .stelco import Stelco
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Dhiraagu',
|
||||||
|
'Ooredoo',
|
||||||
|
'Medianet',
|
||||||
|
'Stelco',
|
||||||
|
'Mwsc'
|
||||||
|
]
|
5
apps/plugins/dhiraagu/__init__.py
Normal file
5
apps/plugins/dhiraagu/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .app import App as Dhiraagu
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Dhiraagu'
|
||||||
|
]
|
18
apps/plugins/dhiraagu/app.py
Normal file
18
apps/plugins/dhiraagu/app.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView
|
||||||
|
|
||||||
|
|
||||||
|
def App(page: ft.Page):
|
||||||
|
return AppView(
|
||||||
|
'/apps/dhiraagu',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
title=ft.Text("Dhiraagu"),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
5
apps/plugins/medianet/__init__.py
Normal file
5
apps/plugins/medianet/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .app import App as Medianet
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"Medianet"
|
||||||
|
]
|
18
apps/plugins/medianet/app.py
Normal file
18
apps/plugins/medianet/app.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView
|
||||||
|
|
||||||
|
|
||||||
|
def App(page: ft.Page):
|
||||||
|
return AppView(
|
||||||
|
'/apps/medianet',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
title=ft.Text("Medianet"),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
5
apps/plugins/mwsc/__init__.py
Normal file
5
apps/plugins/mwsc/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .app import App as Mwsc
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Mwsc'
|
||||||
|
]
|
18
apps/plugins/mwsc/app.py
Normal file
18
apps/plugins/mwsc/app.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView
|
||||||
|
|
||||||
|
|
||||||
|
def App(page: ft.Page):
|
||||||
|
return AppView(
|
||||||
|
'/apps/mwsc',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
title=ft.Text("MWSC"),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
5
apps/plugins/ooredoo/__init__.py
Normal file
5
apps/plugins/ooredoo/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .app import App as Ooredoo
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Ooredoo'
|
||||||
|
]
|
18
apps/plugins/ooredoo/app.py
Normal file
18
apps/plugins/ooredoo/app.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView
|
||||||
|
|
||||||
|
|
||||||
|
def App(page: ft.Page):
|
||||||
|
return AppView(
|
||||||
|
'/apps/ooredoo',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
title=ft.Text("Ooredoo"),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
5
apps/plugins/stelco/__init__.py
Normal file
5
apps/plugins/stelco/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .app import App as Stelco
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Stelco'
|
||||||
|
]
|
18
apps/plugins/stelco/app.py
Normal file
18
apps/plugins/stelco/app.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import flet as ft
|
||||||
|
from utils import AppView
|
||||||
|
|
||||||
|
|
||||||
|
def App(page: ft.Page):
|
||||||
|
return AppView(
|
||||||
|
'/apps/stelco',
|
||||||
|
[
|
||||||
|
ft.AppBar(
|
||||||
|
leading=ft.IconButton(
|
||||||
|
ft.icons.ARROW_BACK_IOS_NEW_ROUNDED,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
title=ft.Text("STELCO"),
|
||||||
|
bgcolor=ft.colors.TRANSPARENT,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
1
main.py
1
main.py
@ -2,6 +2,7 @@ import flet as ft
|
|||||||
from utils import views_handler
|
from utils import views_handler
|
||||||
from modules.settings.functions import config
|
from modules.settings.functions import config
|
||||||
|
|
||||||
|
|
||||||
def main(page: ft.Page):
|
def main(page: ft.Page):
|
||||||
page.title = 'BillPay'
|
page.title = 'BillPay'
|
||||||
print('Initial route:', page.route)
|
print('Initial route:', page.route)
|
||||||
|
@ -2,4 +2,4 @@ from .home import Home
|
|||||||
from .settings import Settings
|
from .settings import Settings
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Home', 'Settings']
|
__all__ = ['Home', 'Settings', 'Apps']
|
||||||
|
@ -13,6 +13,11 @@ def greet(time: datetime):
|
|||||||
return 'Goodevening,'
|
return 'Goodevening,'
|
||||||
|
|
||||||
|
|
||||||
|
AppRow = ft.ResponsiveRow(
|
||||||
|
alignment=ft.MainAxisAlignment.CENTER,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def Home(page: ft.Page):
|
def Home(page: ft.Page):
|
||||||
contentColumn = ft.Container(
|
contentColumn = ft.Container(
|
||||||
padding=10,
|
padding=10,
|
||||||
@ -21,50 +26,15 @@ def Home(page: ft.Page):
|
|||||||
ft.Text(
|
ft.Text(
|
||||||
greet(datetime.now()),
|
greet(datetime.now()),
|
||||||
size=50,
|
size=50,
|
||||||
weight=ft.FontWeight.W_200,
|
weight=ft.FontWeight.W_500,
|
||||||
),
|
),
|
||||||
ft.Text(
|
ft.Text(
|
||||||
config.get('general', 'name').split(' ')[0],
|
config.get('general', 'name').split(' ')[0],
|
||||||
size=40,
|
size=40,
|
||||||
weight=ft.FontWeight.W_200,
|
weight=ft.FontWeight.W_300,
|
||||||
),
|
),
|
||||||
ft.Divider(),
|
ft.Divider(),
|
||||||
ft.ResponsiveRow(
|
AppRow,
|
||||||
[
|
|
||||||
ft.Container(
|
|
||||||
content=ft.Text('A'),
|
|
||||||
margin=10,
|
|
||||||
padding=10,
|
|
||||||
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
|
||||||
border_radius=10,
|
|
||||||
),
|
|
||||||
ft.Divider(),
|
|
||||||
ft.Container(
|
|
||||||
content=ft.Text('B'),
|
|
||||||
margin=10,
|
|
||||||
padding=10,
|
|
||||||
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
|
||||||
border_radius=10,
|
|
||||||
),
|
|
||||||
ft.Divider(),
|
|
||||||
ft.Container(
|
|
||||||
content=ft.Text('C'),
|
|
||||||
margin=10,
|
|
||||||
padding=10,
|
|
||||||
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
|
||||||
border_radius=10,
|
|
||||||
),
|
|
||||||
ft.Divider(),
|
|
||||||
ft.Container(
|
|
||||||
content=ft.Text('D'),
|
|
||||||
margin=10,
|
|
||||||
padding=10,
|
|
||||||
bgcolor=ft.colors.with_opacity(0.1, '#000000'),
|
|
||||||
border_radius=10,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
alignment=ft.MainAxisAlignment.CENTER,
|
|
||||||
),
|
|
||||||
ft.Divider(),
|
ft.Divider(),
|
||||||
ft.Container(
|
ft.Container(
|
||||||
margin=10,
|
margin=10,
|
||||||
@ -74,7 +44,23 @@ def Home(page: ft.Page):
|
|||||||
content=ft.Row(
|
content=ft.Row(
|
||||||
[
|
[
|
||||||
ft.Container(
|
ft.Container(
|
||||||
content=ft.Icon(ft.icons.APPS, color=ft.colors.WHITE),
|
content=ft.Icon(
|
||||||
|
ft.icons.APPS, color=ft.colors.WHITE,
|
||||||
|
),
|
||||||
|
margin=10,
|
||||||
|
padding=10,
|
||||||
|
alignment=ft.alignment.center,
|
||||||
|
bgcolor=ft.colors.GREY_700,
|
||||||
|
width=60,
|
||||||
|
height=60,
|
||||||
|
border_radius=10,
|
||||||
|
ink=True,
|
||||||
|
on_click=lambda _: page.go('/apps'),
|
||||||
|
),
|
||||||
|
ft.Container(
|
||||||
|
content=ft.Icon(
|
||||||
|
ft.icons.HISTORY, color=ft.colors.WHITE,
|
||||||
|
),
|
||||||
margin=10,
|
margin=10,
|
||||||
padding=10,
|
padding=10,
|
||||||
alignment=ft.alignment.center,
|
alignment=ft.alignment.center,
|
||||||
@ -85,18 +71,9 @@ def Home(page: ft.Page):
|
|||||||
on_click=None,
|
on_click=None,
|
||||||
),
|
),
|
||||||
ft.Container(
|
ft.Container(
|
||||||
content=ft.Icon(ft.icons.HISTORY, color=ft.colors.WHITE),
|
content=ft.Icon(
|
||||||
margin=10,
|
ft.icons.SETTINGS, color=ft.colors.WHITE,
|
||||||
padding=10,
|
),
|
||||||
alignment=ft.alignment.center,
|
|
||||||
bgcolor=ft.colors.GREY_700,
|
|
||||||
width=60,
|
|
||||||
height=60,
|
|
||||||
border_radius=10,
|
|
||||||
on_click=None,
|
|
||||||
),
|
|
||||||
ft.Container(
|
|
||||||
content=ft.Icon(ft.icons.SETTINGS, color=ft.colors.WHITE),
|
|
||||||
margin=10,
|
margin=10,
|
||||||
padding=10,
|
padding=10,
|
||||||
alignment=ft.alignment.center,
|
alignment=ft.alignment.center,
|
||||||
@ -108,7 +85,9 @@ def Home(page: ft.Page):
|
|||||||
on_click=lambda _: page.go('/settings'),
|
on_click=lambda _: page.go('/settings'),
|
||||||
),
|
),
|
||||||
ft.Container(
|
ft.Container(
|
||||||
content=ft.Icon(ft.icons.LIST, color=ft.colors.WHITE),
|
content=ft.Icon(
|
||||||
|
ft.icons.LIST, color=ft.colors.WHITE,
|
||||||
|
),
|
||||||
margin=10,
|
margin=10,
|
||||||
padding=10,
|
padding=10,
|
||||||
alignment=ft.alignment.center,
|
alignment=ft.alignment.center,
|
||||||
|
@ -10,17 +10,18 @@ email =
|
|||||||
theme = dark
|
theme = dark
|
||||||
|
|
||||||
[apps]
|
[apps]
|
||||||
dhiraagu = true
|
dhiraagu = 1
|
||||||
ooredoo = true
|
ooredoo = 1
|
||||||
hdc = true
|
hdc = 1
|
||||||
mwsc = true
|
mwsc = 1
|
||||||
stelco = true
|
stelco = 1
|
||||||
medianet = true
|
medianet = 1
|
||||||
|
|
||||||
[dhiraagu]
|
[dhiraagu]
|
||||||
phone =
|
phone =
|
||||||
otp =
|
otp =
|
||||||
cookie =
|
token =
|
||||||
|
account =
|
||||||
|
|
||||||
[ooredoo]
|
[ooredoo]
|
||||||
phone =
|
phone =
|
||||||
|
@ -31,7 +31,7 @@ def Settings(page: ft.Page):
|
|||||||
ft.CupertinoButton(
|
ft.CupertinoButton(
|
||||||
'Close', on_click=lambda _: (
|
'Close', on_click=lambda _: (
|
||||||
setattr(dlg, 'open', False),
|
setattr(dlg, 'open', False),
|
||||||
page.update()
|
page.update(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -62,7 +62,7 @@ def Settings(page: ft.Page):
|
|||||||
ft.CupertinoButton(
|
ft.CupertinoButton(
|
||||||
'Close', on_click=lambda _: (
|
'Close', on_click=lambda _: (
|
||||||
setattr(dlg, 'open', False),
|
setattr(dlg, 'open', False),
|
||||||
page.update()
|
page.update(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -93,7 +93,7 @@ def Settings(page: ft.Page):
|
|||||||
ft.CupertinoButton(
|
ft.CupertinoButton(
|
||||||
'Close', on_click=lambda _: (
|
'Close', on_click=lambda _: (
|
||||||
setattr(dlg, 'open', False),
|
setattr(dlg, 'open', False),
|
||||||
page.update()
|
page.update(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -124,7 +124,7 @@ def Settings(page: ft.Page):
|
|||||||
ft.CupertinoButton(
|
ft.CupertinoButton(
|
||||||
'Close', on_click=lambda _: (
|
'Close', on_click=lambda _: (
|
||||||
setattr(dlg, 'open', False),
|
setattr(dlg, 'open', False),
|
||||||
page.update()
|
page.update(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -267,7 +267,7 @@ def Settings(page: ft.Page):
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
padding=10,
|
padding=10,
|
||||||
on_click=lambda _: print('clicked dhiraagu'),
|
on_click=None,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
ft.Card(
|
ft.Card(
|
||||||
@ -368,10 +368,10 @@ def Settings(page: ft.Page):
|
|||||||
def _on_theme_change(e):
|
def _on_theme_change(e):
|
||||||
if page.theme_mode == ft.ThemeMode.LIGHT:
|
if page.theme_mode == ft.ThemeMode.LIGHT:
|
||||||
e.value = False
|
e.value = False
|
||||||
config.save('general', 'theme', 'light')
|
config.save('general', 'theme', 'dark')
|
||||||
else:
|
else:
|
||||||
e.value = True
|
e.value = True
|
||||||
config.save('general', 'theme', 'dark')
|
config.save('general', 'theme', 'light')
|
||||||
Theme(page).change(
|
Theme(page).change(
|
||||||
ft.ThemeMode.DARK if page.theme_mode ==
|
ft.ThemeMode.DARK if page.theme_mode ==
|
||||||
ft.ThemeMode.LIGHT else ft.ThemeMode.LIGHT,
|
ft.ThemeMode.LIGHT else ft.ThemeMode.LIGHT,
|
||||||
|
@ -1,8 +1,20 @@
|
|||||||
from modules import Home, Settings
|
from modules import Home, Settings
|
||||||
|
from apps import Apps
|
||||||
|
from apps.plugins import Ooredoo, Dhiraagu, Medianet, Mwsc, Stelco
|
||||||
|
|
||||||
|
|
||||||
def views_handler(page):
|
def views_handler(page):
|
||||||
return {
|
views = {}
|
||||||
'/': Home(page),
|
# root
|
||||||
'/settings': Settings(page),
|
views['/'] = Home(page)
|
||||||
}
|
|
||||||
|
# settings
|
||||||
|
views['/settings'] = Settings(page)
|
||||||
|
# apps
|
||||||
|
views['/apps'] = Apps(page)
|
||||||
|
views['/apps/dhiraagu'] = Dhiraagu(page)
|
||||||
|
views['/apps/ooredoo'] = Ooredoo(page)
|
||||||
|
views['/apps/medianet'] = Medianet(page)
|
||||||
|
views['/apps/mwsc'] = Mwsc(page)
|
||||||
|
views['/apps/stelco'] = Stelco(page)
|
||||||
|
return views
|
||||||
|
5
wrappers/__init__.py
Normal file
5
wrappers/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .dhiraagu import DhiraaguAPI
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'DhiraaguAPI'
|
||||||
|
]
|
42
wrappers/dhiraagu.py
Normal file
42
wrappers/dhiraagu.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
class DhiraaguAPI:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
phone: str = None,
|
||||||
|
otp: str = None,
|
||||||
|
token: str = None,
|
||||||
|
account: str = None,
|
||||||
|
) -> None:
|
||||||
|
self.phone = phone
|
||||||
|
self.otp = otp
|
||||||
|
self.token = token
|
||||||
|
self.account = account
|
||||||
|
self.headers = {
|
||||||
|
'Host': 'app-production.dhiraagu.com.mv',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Connection': 'keep-alive',
|
||||||
|
'Accept': '*/*',
|
||||||
|
'User-Agent': 'MyDhiraagu/5.0 (mv.com.dhiraagu.app; build:1; iOS 17.5.0) Alamofire/5.6.1',
|
||||||
|
'Accept-Language': 'en-US;q=1.0, dv-MV;q=0.9, ar-MV;q=0.8',
|
||||||
|
# 'Content-Length': '33',
|
||||||
|
# 'Accept-Encoding': 'br;q=1.0, gzip;q=0.9, deflate;q=0.8',
|
||||||
|
}
|
||||||
|
if self.token:
|
||||||
|
self.headers['Authorization'] = f'Bearer {self.token}'
|
||||||
|
|
||||||
|
def login(self):
|
||||||
|
data = requests.post(
|
||||||
|
'https://app-production.dhiraagu.com.mv/auth',
|
||||||
|
json={
|
||||||
|
'number': self.phone,
|
||||||
|
'otp': self.otp
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return data.json()
|
||||||
|
|
||||||
|
def bills(self):
|
||||||
|
return requests.get(
|
||||||
|
f'https://app-production.dhiraagu.com.mv/io/v1/info/subscribers/{self.account}/liberate/billinfo',
|
||||||
|
headers=self.headers
|
||||||
|
).json()
|
Loading…
x
Reference in New Issue
Block a user