Refactor package architecture

Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Loren Eteval
2026-08-12 12:20:47 +08:00
parent 219343a06a
commit 4616aded6a
88 changed files with 869 additions and 794 deletions
+83
View File
@@ -0,0 +1,83 @@
# Copyright (C) 2024–present Loren Eteval & contributors <loren.eteval@proton.me>
#
# This file is part of Furious.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
"""Persist subscription definitions."""
from __future__ import annotations
from Furious.Frozenlib import *
from Furious.Interface import *
from Furious.Domain.Encoding import *
__all__ = ['UserSubs']
registerAppSettings('CustomSubscription')
class UserSubEntry:
"""Describe one user sub entry."""
remark: str
webURL: str
autoupdate: str
proxy: str
class UserSub:
"""Represent user sub."""
unique: dict[str, dict]
class UserSubs(Mixins.CleanupOnExit, StorageBackend):
# unique: { remark, webURL }
"""Manage the persisted subscription collection."""
def __init__(self, *args, **kwargs):
"""Initialize the UserSubs."""
super().__init__(*args, **kwargs)
def restore():
"""Restore the user subs."""
try:
return UJSONEncoder.decode(
PyBase64Encoder.decode(AppSettings.get('CustomSubscription'))
)
except Exception:
# Any non-exit exceptions
return {}
self._data = restore()
def sync(self):
"""Persist the current user subs data."""
AppSettings.set(
'CustomSubscription',
PyBase64Encoder.encode(
UJSONEncoder.encode(self._data).encode(),
),
)
def data(self) -> dict[str, dict]:
# Shallow copy
"""Return the data managed by the user subs."""
return self._data
def cleanup(self):
"""Release resources owned by the user subs."""
self.sync()