Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
tuneit
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ximper Linux
tuneit
Commits
d72c0c2d
Commit
d72c0c2d
authored
Apr 16, 2025
by
Roman Alifanov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
duplicate code has been moved to the base class
parent
711a541e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
143 additions
and
223 deletions
+143
-223
base.py
src/settings/setting/base.py
+137
-0
custom_setting.py
src/settings/setting/custom_setting.py
+3
-96
setting.py
src/settings/setting/setting.py
+3
-127
No files found.
src/settings/setting/base.py
0 → 100644
View file @
d72c0c2d
import
logging
import
threading
import
time
from
..searcher
import
SearcherFactory
from
gi.repository
import
GLib
class
BaseSetting
:
def
__init__
(
self
,
setting_data
,
module
):
self
.
_
=
module
.
get_translation
self
.
module
=
module
self
.
name
=
self
.
_
(
setting_data
[
'name'
])
self
.
orig_name
=
setting_data
[
'name'
]
self
.
logger
=
logging
.
getLogger
(
f
"{self.__class__.__name__}[{self.name}]"
)
self
.
widget
=
None
self
.
root
=
setting_data
.
get
(
'root'
,
False
)
self
.
params
=
{
**
setting_data
.
get
(
'params'
,
{}),
'module_path'
:
module
.
path
}
self
.
type
=
setting_data
[
'type'
]
self
.
help
=
setting_data
.
get
(
'help'
,
None
)
if
self
.
help
is
not
None
:
self
.
help
=
self
.
_
(
self
.
help
)
self
.
default
=
setting_data
.
get
(
'default'
)
self
.
gtype
=
setting_data
.
get
(
'gtype'
,
[])
self
.
_current_value
=
None
self
.
search_target
=
setting_data
.
get
(
'search_target'
,
None
)
self
.
map
=
setting_data
.
get
(
'map'
)
self
.
prepare_map
()
self
.
update_interval
=
setting_data
.
get
(
'update_interval'
,
None
)
if
self
.
update_interval
:
self
.
_start_update_thread
()
def
prepare_map
(
self
):
if
self
.
map
is
None
:
if
self
.
search_target
is
not
None
:
self
.
map
=
SearcherFactory
.
create
(
self
.
search_target
)
.
search
()
else
:
self
.
map
=
self
.
_default_map
()
if
isinstance
(
self
.
map
,
list
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
item
.
title
():
item
for
item
in
self
.
map
if
item
is
not
None
}
if
not
self
.
map
:
self
.
logger
.
warning
(
f
"Warning: 'map' is empty for setting {self.name}. Check data source."
)
if
isinstance
(
self
.
map
,
dict
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
self
.
_
(
key
)
if
isinstance
(
key
,
str
)
else
key
:
value
for
key
,
value
in
self
.
map
.
items
()
}
if
not
self
.
map
:
self
.
logger
.
warning
(
f
"Warning: 'map' is empty for setting {self.name}. Check data source."
)
if
len
(
self
.
gtype
)
>
2
:
self
.
gtype
=
self
.
gtype
[
0
]
else
:
self
.
gtype
=
self
.
gtype
def
_default_map
(
self
):
if
self
.
type
==
'boolean'
:
# Дефолтная карта для булевых настроек
return
{
True
:
True
,
False
:
False
}
if
'choice'
in
self
.
type
:
# Дефолтная карта для выборов
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
for
var
in
range
:
self
.
logger
.
debug
(
var
)
map
[
var
[
0
]
.
upper
()
+
var
[
1
:]]
=
var
return
map
if
self
.
type
==
'number'
:
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
map
[
"upper"
]
=
range
[
1
]
map
[
"lower"
]
=
range
[
0
]
# Кол-во после запятой
map
[
"digits"
]
=
len
(
str
(
range
[
0
])
.
split
(
'.'
)[
-
1
])
if
'.'
in
str
(
range
[
0
])
else
0
# Минимальное число с этим количеством
map
[
"step"
]
=
10
**
-
map
[
"digits"
]
if
map
[
"digits"
]
>
0
else
0
return
map
return
{}
def
_get_selected_row_index
(
self
):
current_value
=
self
.
_get_backend_value
()
return
list
(
self
.
map
.
values
())
.
index
(
current_value
)
if
current_value
in
self
.
map
.
values
()
else
0
def
_get_default_row_index
(
self
):
return
list
(
self
.
map
.
values
())
.
index
(
self
.
default
)
if
self
.
default
in
self
.
map
.
values
()
else
None
def
_start_update_thread
(
self
):
def
update_loop
():
while
True
:
time
.
sleep
(
self
.
update_interval
)
prev_value
=
self
.
_current_value
current_value
=
self
.
_get_backend_value
(
force
=
True
)
if
current_value
!=
prev_value
:
GLib
.
idle_add
(
self
.
_update_widget
)
thread
=
threading
.
Thread
(
target
=
update_loop
,
daemon
=
True
)
thread
.
start
()
def
_update_widget
(
self
):
if
self
.
widget
:
self
.
widget
.
update_display
()
return
False
src/settings/setting/custom_setting.py
View file @
d72c0c2d
from
.
.searcher
import
SearcherFactory
from
.
base
import
BaseSetting
from
.widgets
import
WidgetFactory
from
.widgets
import
WidgetFactory
...
@@ -7,98 +7,15 @@ import subprocess
...
@@ -7,98 +7,15 @@ import subprocess
import
ast
import
ast
class
CustomSetting
:
class
CustomSetting
(
BaseSetting
)
:
def
__init__
(
self
,
setting_data
,
module
,
section
):
def
__init__
(
self
,
setting_data
,
module
,
section
):
self
.
_
=
module
.
get_translation
self
.
module
=
module
self
.
section
=
section
self
.
section
=
section
self
.
logger
=
logging
.
getLogger
(
f
"CustomSetting[{setting_data['name']}]"
)
self
.
name
=
self
.
_
(
setting_data
[
'name'
])
self
.
orig_name
=
setting_data
[
'name'
]
self
.
type
=
setting_data
[
'type'
]
self
.
default
=
setting_data
.
get
(
'default'
,
''
)
self
.
help
=
setting_data
.
get
(
'help'
,
None
)
if
self
.
help
is
not
None
:
self
.
help
=
self
.
_
(
self
.
help
)
self
.
_current_value
=
None
self
.
get_command
=
setting_data
.
get
(
'get_command'
)
self
.
get_command
=
setting_data
.
get
(
'get_command'
)
self
.
get_range_command
=
setting_data
.
get
(
'get_range_command'
)
self
.
get_range_command
=
setting_data
.
get
(
'get_range_command'
)
self
.
set_command
=
setting_data
.
get
(
'set_command'
)
self
.
set_command
=
setting_data
.
get
(
'set_command'
)
self
.
gtype
=
setting_data
.
get
(
'gtype'
,
's'
)
super
()
.
__init__
(
setting_data
,
module
)
if
len
(
self
.
gtype
)
>
2
:
self
.
gtype
=
self
.
gtype
[
0
]
else
:
self
.
gtype
=
self
.
gtype
self
.
search_target
=
setting_data
.
get
(
'search_target'
)
self
.
params
=
{
**
setting_data
.
get
(
'params'
,
{}),
'module_path'
:
module
.
path
}
self
.
widget
=
None
self
.
row
=
None
self
.
map
=
setting_data
.
get
(
'map'
)
if
self
.
map
is
None
:
if
self
.
search_target
is
not
None
:
self
.
map
=
SearcherFactory
.
create
(
self
.
search_target
)
.
search
()
else
:
self
.
map
=
self
.
_default_map
()
if
isinstance
(
self
.
map
,
list
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
item
.
title
():
item
for
item
in
self
.
map
}
if
isinstance
(
self
.
map
,
dict
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
self
.
_
(
key
)
if
isinstance
(
key
,
str
)
else
key
:
value
for
key
,
value
in
self
.
map
.
items
()
}
def
_default_map
(
self
):
if
self
.
type
==
'boolean'
:
# Дефолтная карта для булевых настроек
return
{
True
:
True
,
False
:
False
}
if
'choice'
in
self
.
type
:
# Дефолтная карта для выборов
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
for
var
in
range
:
self
.
logger
.
debug
(
var
)
map
[
var
[
0
]
.
upper
()
+
var
[
1
:]]
=
var
return
map
if
self
.
type
==
'number'
:
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
map
[
"upper"
]
=
range
[
1
]
map
[
"lower"
]
=
range
[
0
]
# Кол-во после запятой
map
[
"digits"
]
=
len
(
str
(
range
[
0
])
.
split
(
'.'
)[
-
1
])
if
'.'
in
str
(
range
[
0
])
else
0
# Минимальное число с этим количеством
map
[
"step"
]
=
10
**
-
map
[
"digits"
]
if
map
[
"digits"
]
>
0
else
0
return
map
return
{}
def
create_row
(
self
):
def
create_row
(
self
):
try
:
try
:
...
@@ -124,13 +41,6 @@ class CustomSetting:
...
@@ -124,13 +41,6 @@ class CustomSetting:
def
get_range
(
self
):
def
get_range
(
self
):
return
self
.
_execute_get_range_command
()
return
self
.
_execute_get_range_command
()
def
_get_selected_row_index
(
self
):
current_value
=
self
.
_get_backend_value
()
return
list
(
self
.
map
.
values
())
.
index
(
current_value
)
if
current_value
in
self
.
map
.
values
()
else
0
def
_get_default_row_index
(
self
):
return
list
(
self
.
map
.
values
())
.
index
(
self
.
default
)
if
self
.
default
in
self
.
map
.
values
()
else
None
def
_execute_command
(
self
,
cmd
,
capture_output
=
True
):
def
_execute_command
(
self
,
cmd
,
capture_output
=
True
):
with
subprocess
.
Popen
(
with
subprocess
.
Popen
(
cmd
,
cmd
,
...
@@ -239,9 +149,6 @@ class CustomSetting:
...
@@ -239,9 +149,6 @@ class CustomSetting:
except
ValueError
:
except
ValueError
:
self
.
logger
.
error
(
f
"Invalid notify format: {line}"
)
self
.
logger
.
error
(
f
"Invalid notify format: {line}"
)
def
_update_widget
(
self
):
if
self
.
widget
:
self
.
widget
.
update_display
()
@property
@property
def
current_value
(
self
):
def
current_value
(
self
):
...
...
src/settings/setting/setting.py
View file @
d72c0c2d
import
logging
from
.base
import
BaseSetting
import
threading
import
time
from
..searcher
import
SearcherFactory
from
.widgets
import
WidgetFactory
from
.widgets
import
WidgetFactory
from
..backends
import
backend_factory
from
..backends
import
backend_factory
from
..daemon_client
import
dclient
from
..daemon_client
import
dclient
from
..tools.gvariant
import
convert_by_gvariant
from
..tools.gvariant
import
convert_by_gvariant
from
..widgets.service_dialog
import
ServiceNotStartedDialog
from
..widgets.service_dialog
import
ServiceNotStartedDialog
from
gi.repository
import
GLib
service_stopped
=
False
service_stopped
=
False
class
Setting
:
class
Setting
(
BaseSetting
)
:
def
__init__
(
self
,
setting_data
,
module
):
def
__init__
(
self
,
setting_data
,
module
):
self
.
_
=
module
.
get_translation
self
.
name
=
self
.
_
(
setting_data
[
'name'
])
self
.
logger
=
logging
.
getLogger
(
f
"{self.__class__.__name__}[{self.name}]"
)
self
.
widget
=
None
self
.
root
=
setting_data
.
get
(
'root'
,
False
)
self
.
backend
=
setting_data
.
get
(
'backend'
)
self
.
backend
=
setting_data
.
get
(
'backend'
)
self
.
params
=
{
**
setting_data
.
get
(
'params'
,
{}),
'module_path'
:
module
.
path
}
self
.
type
=
setting_data
[
'type'
]
self
.
help
=
setting_data
.
get
(
'help'
,
None
)
if
self
.
help
is
not
None
:
self
.
help
=
self
.
_
(
self
.
help
)
self
.
key
=
setting_data
.
get
(
'key'
)
self
.
key
=
setting_data
.
get
(
'key'
)
self
.
default
=
setting_data
.
get
(
'default'
)
self
.
gtype
=
setting_data
.
get
(
'gtype'
,
[])
self
.
_current_value
=
None
super
()
.
__init__
(
setting_data
,
module
)
self
.
search_target
=
setting_data
.
get
(
'search_target'
,
None
)
self
.
map
=
setting_data
.
get
(
'map'
)
if
self
.
map
is
None
:
if
self
.
search_target
is
not
None
:
self
.
map
=
SearcherFactory
.
create
(
self
.
search_target
)
.
search
()
else
:
self
.
map
=
self
.
_default_map
()
if
isinstance
(
self
.
map
,
list
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
item
.
title
():
item
for
item
in
self
.
map
if
item
is
not
None
}
if
not
self
.
map
:
self
.
logger
.
warning
(
f
"Warning: 'map' is empty for setting {self.name}. Check data source."
)
if
isinstance
(
self
.
map
,
dict
)
and
'choice'
in
self
.
type
:
self
.
map
=
{
self
.
_
(
key
)
if
isinstance
(
key
,
str
)
else
key
:
value
for
key
,
value
in
self
.
map
.
items
()
}
if
not
self
.
map
:
self
.
logger
.
warning
(
f
"Warning: 'map' is empty for setting {self.name}. Check data source."
)
if
len
(
self
.
gtype
)
>
2
:
self
.
gtype
=
self
.
gtype
[
0
]
else
:
self
.
gtype
=
self
.
gtype
self
.
update_interval
=
setting_data
.
get
(
'update_interval'
,
None
)
if
self
.
update_interval
:
self
.
_start_update_thread
()
def
_default_map
(
self
):
if
self
.
type
==
'boolean'
:
# Дефолтная карта для булевых настроек
return
{
True
:
True
,
False
:
False
}
if
'choice'
in
self
.
type
:
# Дефолтная карта для выборов
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
for
var
in
range
:
self
.
logger
.
debug
(
var
)
map
[
var
[
0
]
.
upper
()
+
var
[
1
:]]
=
var
return
map
if
self
.
type
==
'number'
:
map
=
{}
range
=
self
.
_get_backend_range
()
if
range
is
None
:
return
{}
map
[
"upper"
]
=
range
[
1
]
map
[
"lower"
]
=
range
[
0
]
# Кол-во после запятой
map
[
"digits"
]
=
len
(
str
(
range
[
0
])
.
split
(
'.'
)[
-
1
])
if
'.'
in
str
(
range
[
0
])
else
0
# Минимальное число с этим количеством
map
[
"step"
]
=
10
**
-
map
[
"digits"
]
if
map
[
"digits"
]
>
0
else
0
return
map
return
{}
def
create_row
(
self
):
def
create_row
(
self
):
if
self
.
root
is
True
:
if
self
.
root
is
True
:
...
@@ -136,13 +37,6 @@ class Setting:
...
@@ -136,13 +37,6 @@ class Setting:
self
.
widget
=
WidgetFactory
.
create_widget
(
self
)
self
.
widget
=
WidgetFactory
.
create_widget
(
self
)
return
self
.
widget
.
create_row
()
if
self
.
widget
else
None
return
self
.
widget
.
create_row
()
if
self
.
widget
else
None
def
_get_selected_row_index
(
self
):
current_value
=
self
.
_get_backend_value
()
return
list
(
self
.
map
.
values
())
.
index
(
current_value
)
if
current_value
in
self
.
map
.
values
()
else
0
def
_get_default_row_index
(
self
):
return
list
(
self
.
map
.
values
())
.
index
(
self
.
default
)
if
self
.
default
in
self
.
map
.
values
()
else
None
def
_get_backend_value
(
self
,
force
=
False
):
def
_get_backend_value
(
self
,
force
=
False
):
if
self
.
_current_value
is
None
or
force
is
True
:
if
self
.
_current_value
is
None
or
force
is
True
:
backend
=
self
.
_get_backend
()
backend
=
self
.
_get_backend
()
...
@@ -176,20 +70,3 @@ class Setting:
...
@@ -176,20 +70,3 @@ class Setting:
if
not
backend
:
if
not
backend
:
self
.
logger
.
error
(
f
"Бекенд {self.backend} не зарегистрирован."
)
self
.
logger
.
error
(
f
"Бекенд {self.backend} не зарегистрирован."
)
return
backend
return
backend
def
_start_update_thread
(
self
):
def
update_loop
():
while
True
:
time
.
sleep
(
self
.
update_interval
)
prev_value
=
self
.
_current_value
current_value
=
self
.
_get_backend_value
(
force
=
True
)
if
current_value
!=
prev_value
:
GLib
.
idle_add
(
self
.
_update_widget
)
thread
=
threading
.
Thread
(
target
=
update_loop
,
daemon
=
True
)
thread
.
start
()
def
_update_widget
(
self
):
if
self
.
widget
:
self
.
widget
.
update_display
()
return
False
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment