Initial console based pyrip implementation

This commit is contained in:
Dirk Alders 2024-09-12 20:21:16 +02:00
parent 35ca73b737
commit 48dc481f26
11 changed files with 831 additions and 0 deletions

12
.gitmodules vendored Normal file
View File

@ -0,0 +1,12 @@
[submodule "fstools"]
path = fstools
url = https://git.mount-mockery.de/pylib/fstools.git
[submodule "report"]
path = report
url = https://git.mount-mockery.de/pylib/report.git
[submodule "task"]
path = task
url = https://git.mount-mockery.de/pylib/task.git
[submodule "media"]
path = media
url = https://git.mount-mockery.de/pylib/media.git

16
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
// Verwendet IntelliSense zum Ermitteln möglicher Attribute.
// Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Main File execution",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/pyrip.py",
"console": "integratedTerminal",
"justMyCode": true
}
]
}

14
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,14 @@
{
"python.defaultInterpreterPath": "./venv/bin/python",
"autopep8.args": ["--max-line-length=150"],
"[python]": {
"python.formatting.provider": "none",
"editor.defaultFormatter": "ms-python.autopep8",
"editor.formatOnSave": true
},
"editor.fontSize": 14,
"emmet.includeLanguages": { "django-html": "html" },
"python.testing.pytestArgs": ["-v", "--cov", "--cov-report=xml", "__test__"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}

1
config.py Normal file
View File

@ -0,0 +1 @@
APP_NAME = 'pyrip'

1
fstools Submodule

@ -0,0 +1 @@
Subproject commit c10e8792abb05671dab6de51cdadda3bf8ead50f

295
icon.xpm Normal file
View File

@ -0,0 +1,295 @@
/* XPM */
static char *sound-juicer[] = {
/* columns rows colors chars-per-pixel */
"32 32 257 2",
" c #79604B",
". c #7E6754",
"X c #7F756A",
"o c #7D7D7B",
"O c #974503",
"+ c #9B4701",
"@ c #9E4803",
"# c #9A4B0D",
"$ c #9C571D",
"% c #875937",
"& c #925B2E",
"* c #9F683C",
"= c #A34B02",
"- c #AA4D02",
"; c #A6520B",
": c #A4591D",
"> c #AF5D1A",
", c #BA5300",
"< c #BC5807",
"1 c #BC5B0C",
"2 c #B35912",
"3 c #B55F1B",
"4 c #BC5D10",
"5 c #AC5F21",
"6 c #BF6311",
"7 c #B9621C",
"8 c #A4622B",
"9 c #AB6025",
"0 c #AA652C",
"q c #AD682E",
"w c #A36635",
"e c #A0673A",
"r c #A1693D",
"t c #A86733",
"y c #AE6A33",
"u c #A96D3C",
"i c #B36222",
"p c #B46628",
"a c #B2692D",
"s c #BA6A2A",
"d c #B16C33",
"f c #B5733C",
"g c #9C6A43",
"h c #917B69",
"j c #9B7E67",
"k c #A87144",
"l c #AC7950",
"z c #B37544",
"x c #BE7C49",
"c c #C35700",
"v c #C55800",
"b c #C85E01",
"n c #C06012",
"m c #C36619",
"M c #C46A1F",
"N c #D46905",
"B c #D66D0D",
"V c #DE6F06",
"C c #D77114",
"Z c #D8761B",
"A c #C67026",
"S c #C7732D",
"D c #C87228",
"F c #C0773B",
"G c #CB7931",
"H c #D77928",
"J c #DA7A22",
"K c #DB7E29",
"L c #E46D02",
"P c #E67104",
"I c #EF7500",
"U c #EE7F16",
"Y c #F47800",
"T c #F47D0A",
"R c #C17B43",
"E c #AC815E",
"W c #B3835C",
"Q c #BB885E",
"! c #AB8F78",
"~ c #AE917B",
"^ c #B1957E",
"/ c #BD9A7D",
"( c #CF833E",
") c #D0823C",
"_ c #DC8433",
"` c #DE8B3E",
"' c #F48214",
"] c #F18319",
"[ c #F5881F",
"{ c #EA8E3B",
"} c #F58A22",
"| c #F99A25",
" . c #F99C29",
".. c #FAA12E",
"X. c #FAA432",
"o. c #FBA739",
"O. c #FAA835",
"+. c #FBAC3B",
"@. c #C6834E",
"#. c #C28856",
"$. c #CA8D57",
"%. c #D58C4A",
"&. c #DF8F45",
"*. c #DD944D",
"=. c #D69459",
"-. c #C39673",
";. c #C79E7C",
":. c #CF9C73",
">. c #DB9F69",
",. c #DFA36A",
"<. c #D4A074",
"1. c #E1944D",
"2. c #E29753",
"3. c #E39B5A",
"4. c #F79C44",
"5. c #E19B63",
"6. c #E5A45D",
"7. c #FBAE42",
"8. c #FBAE4B",
"9. c #F5A353",
"0. c #FBB144",
"q. c #FBB44C",
"w. c #FFBF40",
"e. c #F6B153",
"r. c #F4B75C",
"t. c #FBB452",
"y. c #FCB854",
"u. c #FCBA5B",
"i. c #E5A362",
"p. c #E5AA6D",
"a. c #E8A566",
"s. c #E3AC7A",
"d. c #E5B17F",
"f. c #E3B87C",
"g. c #E8B677",
"h. c #E8B07D",
"j. c #EEBF7B",
"k. c #F5AB64",
"l. c #F0AD6F",
"z. c #F4B06F",
"x. c #F0B969",
"c. c #F9B069",
"v. c #FABC63",
"b. c #FBBF68",
"n. c #F0BB72",
"m. c #F1BA78",
"M. c yellow",
"N. c #EFC17D",
"B. c #FBC06D",
"V. c #F4C07C",
"C. c #FCC372",
"Z. c #FCC57B",
"A. c #808080",
"S. c #8A8B87",
"D. c #8C8D8A",
"F. c #929292",
"G. c #9B9793",
"H. c #9A9A9A",
"J. c #9EA19D",
"K. c #AE9886",
"L. c #A99D94",
"P. c #B59982",
"I. c #B99C86",
"U. c #BC9F89",
"Y. c #BDA28B",
"T. c #BAA492",
"R. c #BDAA9B",
"E. c #A3A3A3",
"W. c #A6ABA6",
"Q. c #AAACA7",
"!. c #ACACAB",
"~. c #B6B6AD",
"^. c #BEB5AE",
"/. c #B3B3B3",
"(. c #BBBBBB",
"). c #D9AB85",
"_. c #D9B98B",
"`. c #D5BC97",
"'. c #D8BD96",
"]. c #C7BBA4",
"[. c #CDBDA0",
"{. c #CCBAAC",
"}. c #C0BBB8",
"|. c #E6B68A",
" X c #E7BA88",
".X c #E9B680",
"XX c #EAB88F",
"oX c #F5BC87",
"OX c #CDC4BA",
"+X c #DAC6AA",
"@X c #F5CB8D",
"#X c #FAC28B",
"$X c #FDCB82",
"%X c #FCCE8C",
"&X c #F5C395",
"*X c #FBCB9C",
"=X c #FDD497",
"-X c #FDD59A",
";X c #E0CDBE",
":X c #EFD0A6",
">X c #EFD4AB",
",X c #E3D1B5",
"<X c #E3D3BC",
"1X c #EFD7B4",
"2X c #E9D7BC",
"3X c #F6C9A0",
"4X c #F7D7A7",
"5X c #F0D4AC",
"6X c #FDD7A1",
"7X c #FAD7A9",
"8X c #FCD8A3",
"9X c #FDDCAC",
"0X c #F0D2BA",
"qX c #F4D8B0",
"wX c #F9DBB4",
"eX c #FDE2BA",
"rX c #C3C3C2",
"tX c #CBC7C4",
"yX c #CCCCCB",
"uX c #DCCFC4",
"iX c #D5D2CC",
"pX c #DFD3C0",
"aX c #DAD4CC",
"sX c #DCD8CD",
"dX c #D3D3D3",
"fX c #DBDBDA",
"gX c #E4DBCE",
"hX c #EBDBC4",
"jX c #E2DDD6",
"kX c #E3DDD9",
"lX c #F0DEC3",
"zX c #EFE2CE",
"xX c #E5E1DC",
"cX c #EBE1D2",
"vX c #EEE6DB",
"bX c #EEE8DE",
"nX c #F7E4C7",
"mX c #F7E6CE",
"MX c #FDE5C2",
"NX c #F9E7CD",
"BX c #FEE9CA",
"VX c #F0E5DC",
"CX c #F3EADD",
"ZX c #FDECD3",
"AX c #FEEFDA",
"SX c #FEF1DC",
"DX c #E4E4E4",
"FX c #EBEBEB",
"GX c #F5EFE5",
"HX c #FDF2E2",
"JX c #FDF6EB",
"KX c #FFF8ED",
"LX c #F3F3F3",
"PX c #F9F7F4",
"IX c #FEF9F3",
"UX c #FEFEFE",
"YX c None",
/* pixels */
"YXYXYXYXYXYXYXYXYXYXYXYX* * * w w g YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXr d 7 < M D ( A 1 4 y w , YXYXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXr p n *.m.MXIXIXUXUXJXwX*.m 7 w YXYXYXYXYXYXYXYXYX",
"YXYXYXYXYXA.u 1 .XHXIXIXUXeX$XC.%XMXUXSX-Xi.4 a > YXYXYXYXYXYXYX",
"YXYXYXYXg p G ZXUXSX-XKX6X+.O.+.O.+.C.UXUXIXCXx i 8 YXYXYXYXYXYX",
"YXYXYX8 p %.IXIX%X+.O.q.$XX...O. .+.8.8XMXeXIXUX:.3 2 YXYXYXYXYX",
"YXYXYXd D SXKXu.+.X.+. .-X .X.o. .+.8.wXt.y.v.HXIX@.a YXYXYXYXYX",
"YXYXw 1 9XUXZ.O.O.X... .6Xo.+.0.o.q.7X$Xb.b.b.C.KXPXs t YXYXYXYX",
"YXYX7 6.HXSX+.+.| +...+.v.b.q.t.e.V.NX@X@X@X@X@X4XPXuXl YXYXYXYX",
"YXt M 9XIXIX0.X.0.o.q.8.t.eXv.n.f.cX1X>X5X5X5X:X:XHXDX).h YXYXYX",
"YXa p.UXAX9X9XZ.X.t.t.v.b.ZXg._.+XCX<X<XhXhX2X,X<XbXFXfXH.YXYXYX",
", < HXHX0.+. .u.9XC.b.B.n.hXpX].DXkXdXaXaXaX{.d f ;.jXDXH.YXYXYX",
"9 S UX$XO.O.+...X.%XZX:X'.aXsX~.yXrXfX(.(.yXU.2.r.a.f aX/.A.YXYX",
"9 >.UXq.+... ...+.t.N.VXPXYXYXYXYXJ.E././.rXU.a.Y T l.f (.A.YXYX",
"5 .XUX+.X...X.+.q.x._.[.iXYXYXw.YXD.S.(./.rXU.5.Y Y } =.T.A.YXYX",
"5 ,.UXr.+.O.O.+.r.f.`.aXW.YXM.YXYXo o /./.}.I.3.n N ] 9.y A.YXYX",
"> ) UX-X+.O.+.q.j.hXjXdXQ.YXYXYX+ . F.!.!.rXI.2.5 I.7 U R & YXYX",
"> A BXUX8XB.4XnXcXOXtXdX!.S.o % # (.Q.!.(.P.1.y dX}.9 P ; O YX",
", 1 %XHXUXNX>X2XsXfXfXdXdX/.h k ).K.W.W./.rXP.&.0 yXiXiX8 @ + @ ",
"YX7 XIXKXqXhXvXFXDXdXdXyX}.u 0X0Xw E.W.(.rXK.&.y yXyXyXF.O O O ",
"YX5 f UXGXmXGXLXFXFXDXdXyX(.u XX5.R L./.(.(.P.K 0 yXyX/.A.YXYXYX",
"YX, 1 VXUXJXPXLXLXFXFXDXdXyXd } I H k (.(.(.P.K 0 tXyXF.YXYXYXYX",
"YXYX9 -.UXUXPXLXLXFXFXDXfXdXy L L c l (./.(.~ K 0 yXE.A.YXYXYXYX",
"YXYXc E uXUXUXPXLXLXFXDXfXfX{.u 5 u (.(.(./.! J 0 /.F.YXYXYXYXYX",
"YXYXYX7 G.FXPXUXLXLXFXFXDXfXfXdXyXyXrXrX(.(.! Z 8 F.A.YXYXYXYXYX",
"YXYXYXYXA.H.dXUXUXLXLXFXDXDXfXfXdXyXyXtXrX(.^ C $ A.YXYXYXYXYXYX",
"YXYXYXYXYXA.H./.LXPXLXFXDXDXDXfXfXdXtXR.R.}.j B = YXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXA.H.rXFXLXFXFXDXfXQ Q <.|.s.$.p V = YXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXA.H.J./.(.tXW h.*X*X#Xc.4.} ] = YXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXA.A.A.$ *.oX*X&Xl.{ L b = YXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXO @ = - , , - = + O YXYXYXYXYXYXYX",
"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXO O O O YXYXYXYXYXYXYXYXYXYX"
};

1
media Submodule

@ -0,0 +1 @@
Subproject commit 402e8375511470c61021956edad72e1080f51c8e

105
pyrip.py Normal file
View File

@ -0,0 +1,105 @@
import argparse
import config
import logging
import media
import report
import sys
import os
import fstools
try:
from config import APP_NAME as ROOT_LOGGER_NAME
except ImportError:
ROOT_LOGGER_NAME = 'root'
logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__)
def progress_callback_rip(p: float):
bar_length = 40
progress = int(bar_length * p)
out = "\rRipping.... - [ "
out += "*" * progress
out += "-" * (bar_length - progress)
out += " ] %5.1f%%" % (p * 100)
sys.stdout.write(out)
def progress_callback_enc(p: float):
bar_length = 40
progress = int(bar_length * p)
out = "\rEncoding... - [ "
out += "*" * progress
out += "-" * (bar_length - progress)
out += " ] %5.1f%%" % (p * 100)
sys.stdout.write(out)
def cddb_user_callback(what: int, info: dict):
if what == media.CALLBACK_CDDB_CHOICE:
keys = tuple(info.keys())
print("Multiple cddb entries detected:")
print("-------------------------------")
for i in range(0, len(keys)):
print("%2d. %s" % (i + 1, info[keys[i]]))
n = None
while not n:
fb = input("Choose: ")
try:
fb = int(fb)
except ValueError:
n = None
else:
if fb > 0 and fb <= len(keys):
n = fb
if n is None:
print("Use a choice from above!")
print()
return keys[n - 1]
elif what == media.CALLBACK_MAN_INPUT:
print("No cddb entries detected:")
print("-------------------------")
for key in info:
info[key] = input(key[0].upper() + key[1:] + ": ")
return info
def main(**kwargs):
disc_data = media.get_media_data(media.get_disc_device(), cddb_user_callback)
if disc_data is None:
logger.error("Could not reading disc_data")
sys.exit(1)
print("Found Disc:")
print("===========")
print()
print(disc_data[media.common.KEY_ARTIST], "-", disc_data[media.common.KEY_ALBUM])
print("-" * (len(disc_data[media.common.KEY_ARTIST]) + len(disc_data[media.common.KEY_ALBUM]) + 3))
for track_info in disc_data["tracks"]:
i = track_info[media.common.KEY_TRACK]
print("%2d. %s" % (i, track_info[media.common.KEY_TITLE]))
wavfile = media.track_to_targetpath(kwargs.get("basepath"), track_info, 'wav')
try:
fstools.mkdir(os.path.dirname(wavfile))
except PermissionError:
logger.exception("Unable to create ripping target path: %s", os.path.dirname(wavfile))
sys.exit(1)
rv = media.disc_track_rip(i, wavfile, progress_callback_rip)
if rv == 0:
print()
rv = media.wav_to_mp3(wavfile, kwargs.get("basepath"), track_info, progress_callback_enc)
print()
os.remove(wavfile)
if rv != 0:
logger.error("Error while ripping or encoding...")
if __name__ == "__main__":
default_baspath = os.path.join(os.getenv("HOME"), "rip")
parser = argparse.ArgumentParser(description='Description')
parser.add_argument('-v', '--verbose', help='Description for foo argument', action='store_true')
parser.add_argument('-b', '--basepath', help=f'The rip and encode basepath (default is {default_baspath})', default=default_baspath)
args = vars(parser.parse_args())
report.stdoutLoggingConfigure(log_name_lvl=((config.APP_NAME, logging.DEBUG if args.get('verbose') else logging.ERROR),))
main(**args)

384
pyrip.wxg Normal file
View File

@ -0,0 +1,384 @@
<?xml version="1.0"?>
<!-- generated by wxGlade 0.7.1 on Tue Jul 12 10:30:16 2016 -->
<application class="" encoding="UTF-8" for_version="3.0" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="python" name="" option="0" overwrite="0" path="pyrip.py" source_extension=".cpp" top_window="frame_1" use_gettext="1" use_new_namespace="1">
<object class="MainFrame" name="frame_1" base="EditFrame">
<title>PyRip</title>
<size>1033, 761</size>
<object class="wxBoxSizer" name="sizer_main" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>1</option>
<object class="wxNotebook" name="notebook_main" base="EditNotebook">
<tabs>
<tab window="notebook_main_rip">Rip</tab>
<tab window="notebook_main_config">Config</tab>
</tabs>
<object class="wxPanel" name="notebook_main_rip" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer" name="sizer_rip" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>1</option>
<object class="wxBoxSizer" name="sizer_rip_cd_data" base="EditBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>1</option>
<object class="wxListBox" name="track_list" base="EditListBox">
<style>wxLB_MULTIPLE</style>
<selection>0</selection>
<choices>
</choices>
<events>
<handler event="EVT_LISTBOX">evt_tracklist</handler>
</events>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>1</option>
<object class="wxBoxSizer" name="sizer_rip_track_data" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_artist" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Artist</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_artist" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_artist_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_album" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Album</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_album" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_album_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_year" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Year</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_year" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_year_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_genre" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Genre</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_genre" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_genre_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_title" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Title</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_title" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_title_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_track_no" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Trucknumber</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_track_no" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_track_no_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_comment" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Comment</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_comment" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_comment_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>1</option>
<object class="spacer" name="spacer" base="EditSpacer">
<height>20</height>
<width>20</width>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_overall_progress" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Overall Progress</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxGauge" name="gauge_overall_progress" base="EditGauge">
<range>1000</range>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_rip_progress" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Rip Progress</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxGauge" name="gauge_rip_progress" base="EditGauge">
<range>1000</range>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_encode_progress" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Encode Progress</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxGauge" name="gauge_encode_progress" base="EditGauge">
<range>1000</range>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="wxBoxSizer" name="sizer_rip_buttons" base="EditBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="spacer" name="spacer" base="EditSpacer">
<height>20</height>
<width>20</width>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="wxButton" name="button_rip" base="EditButton">
<label>Rip</label>
<events>
<handler event="EVT_BUTTON">evt_rip</handler>
</events>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="spacer" name="spacer" base="EditSpacer">
<height>20</height>
<width>20</width>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="wxButton" name="button_read_disc" base="EditButton">
<label>Read Disc</label>
<events>
<handler event="EVT_BUTTON">evt_new_disc</handler>
</events>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<option>0</option>
<object class="spacer" name="spacer" base="EditSpacer">
<height>20</height>
<width>20</width>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="wxPanel" name="notebook_main_config" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer" name="sizer_notebook_main_config" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_target_path" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Target Path</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_target_path" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_target_path_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_device" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Device</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_device" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_device_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_default_comment" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Default Comment</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_default_comment" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_default_comment_changed</handler>
</events>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxStaticBoxSizer" name="sizer_track_list_string" base="EditStaticBoxSizer">
<orient>wxVERTICAL</orient>
<label>Track List Sting</label>
<object class="sizeritem">
<flag>wxEXPAND</flag>
<border>0</border>
<option>0</option>
<object class="wxTextCtrl" name="text_ctrl_track_list_string" base="EditTextCtrl">
<events>
<handler event="EVT_TEXT">evt_track_list_string_changed</handler>
</events>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</application>

1
report Submodule

@ -0,0 +1 @@
Subproject commit 7003c13ef8c7e7c3a55a545cbbad4039cc024a9f

1
task Submodule

@ -0,0 +1 @@
Subproject commit 7583bb5f3bd2420c901374ba95b678af6ce88433