aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xAAP.svg248
-rw-r--r--ALP.svg131
-rw-r--r--Alee Audio Player.desktop7
-rw-r--r--Alee Audio Player.pro (renamed from AleePlayer.pro)13
-rw-r--r--AleePlayer.desktop7
-rw-r--r--AleePlayer_en_CA.ts3
-rw-r--r--README.md2
-rw-r--r--about.cpp19
-rw-r--r--about.h17
-rw-r--r--about.ui45
-rw-r--r--appveyor.yml6
-rw-r--r--library.cpp54
-rw-r--r--library.h39
-rw-r--r--main.cpp37
-rw-r--r--player.cpp72
-rw-r--r--player.h30
-rw-r--r--player.ui279
-rw-r--r--scripts/appveyor.bat6
-rw-r--r--translations/en_CA.ts202
-rw-r--r--translations/fr_CA.ts202
-rw-r--r--translations/vi_VN.ts202
22 files changed, 1291 insertions, 332 deletions
diff --git a/.gitignore b/.gitignore
index c74505c..3f0e9d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,3 +52,5 @@ compile_commands.json
*creator.user*
build
+
+android
diff --git a/AAP.svg b/AAP.svg
new file mode 100755
index 0000000..bd2317a
--- /dev/null
+++ b/AAP.svg
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1000mm"
+ height="1000mm"
+ viewBox="0 0 1000 1000"
+ version="1.1"
+ id="svg1957"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="AAP.svg">
+ <defs
+ id="defs1951">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter3581-5"
+ x="-0.059999999"
+ width="1.12"
+ y="-0.059999999"
+ height="1.12">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="11.72299"
+ id="feGaussianBlur3583-0" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3954"
+ id="linearGradient4532-0"
+ x1="4.1577382"
+ y1="58.875"
+ x2="199.57143"
+ y2="241.81548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.562833,0,0,0.562833,120.95711,117.57609)" />
+ <linearGradient
+ id="linearGradient3954"
+ inkscape:collect="always">
+ <stop
+ id="stop3950"
+ offset="0"
+ style="stop-color:#ff8807;stop-opacity:1" />
+ <stop
+ id="stop3952"
+ offset="1"
+ style="stop-color:#975100;stop-opacity:1" />
+ </linearGradient>
+ <filter
+ height="1.096"
+ y="-0.048"
+ width="1.096"
+ x="-0.048"
+ id="filter3168"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur3170"
+ stdDeviation="1.5378906"
+ inkscape:collect="always" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="247.911"
+ x2="232.47932"
+ y1="133.34694"
+ x1="120.119"
+ id="linearGradient2918"
+ xlink:href="#linearGradient2924"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2924">
+ <stop
+ style="stop-color:#fcff00;stop-opacity:1"
+ offset="0"
+ id="stop2920" />
+ <stop
+ style="stop-color:#b09100;stop-opacity:1"
+ offset="1"
+ id="stop2922" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.12374369"
+ inkscape:cx="2579.6705"
+ inkscape:cy="799.47074"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ inkscape:window-width="1343"
+ inkscape:window-height="908"
+ inkscape:window-x="569"
+ inkscape:window-y="34"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata1954">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3354"
+ transform="matrix(10.267165,0,0,10.267547,-1289.1305,-1500.2746)"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <path
+ d="m 222.93122,194.81694 a 48.673847,48.673847 0 0 1 -47.79061,48.66583 48.673847,48.673847 0 0 1 -49.52503,-46.89964 48.673847,48.673847 0 0 1 45.99324,-50.36792 48.673847,48.673847 0 0 1 51.19422,45.07168"
+ sodipodi:arc-type="arc"
+ sodipodi:open="true"
+ sodipodi:end="6.2105971"
+ sodipodi:start="0"
+ sodipodi:ry="48.673847"
+ sodipodi:rx="48.673847"
+ sodipodi:cy="194.81694"
+ sodipodi:cx="174.25737"
+ sodipodi:type="arc"
+ id="path817-9"
+ style="fill:#000c80;fill-opacity:1;stroke-width:0.224156" />
+ <path
+ d="M 937.5005,251.83664 A 234.45979,234.45979 0 0 1 704.2221,486.29346 234.45979,234.45979 0 0 1 468.59282,254.19939 234.45979,234.45979 0 0 1 699.49666,17.403634 234.45979,234.45979 0 0 1 937.45288,247.11137"
+ sodipodi:arc-type="arc"
+ transform="matrix(0.18545219,0,0,0.18545219,43.87694,148.11327)"
+ sodipodi:open="true"
+ sodipodi:end="6.2630301"
+ sodipodi:start="0"
+ sodipodi:ry="234.45979"
+ sodipodi:rx="234.45979"
+ sodipodi:cy="251.83664"
+ sodipodi:cx="703.04071"
+ sodipodi:type="arc"
+ id="path819-8-6"
+ style="fill:#191919;fill-opacity:1;stroke-width:1.78393;filter:url(#filter3581-5)" />
+ <path
+ d="m 217.73845,194.81694 a 43.481079,43.481079 0 0 1 -43.26199,43.48053 43.481079,43.481079 0 0 1 -43.69796,-43.04235 43.481079,43.481079 0 0 1 42.82162,-43.91429 43.481079,43.481079 0 0 1 44.1295,42.5998"
+ sodipodi:arc-type="arc"
+ sodipodi:open="true"
+ sodipodi:end="6.2630301"
+ sodipodi:start="0"
+ sodipodi:ry="43.481079"
+ sodipodi:rx="43.481079"
+ sodipodi:cy="194.81694"
+ sodipodi:cx="174.25737"
+ sodipodi:type="arc"
+ id="path819-3"
+ style="fill:url(#linearGradient4532-0);fill-opacity:1;stroke-width:0.330834" />
+ <g
+ id="g3337">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.95665px;line-height:1.25;font-family:Play;-inkscape-font-specification:Play;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.148916"
+ x="172.20232"
+ y="194.81694"
+ id="text1825-5-8"><tspan
+ sodipodi:role="line"
+ id="tspan1823-6-5"
+ x="172.20232"
+ y="194.81694"
+ style="stroke-width:0.148916"> </tspan></text>
+ <circle
+ transform="matrix(0.61264227,0,0,0.61264227,-603.22306,164.97543)"
+ r="38.447266"
+ cy="48.709526"
+ cx="1269.061"
+ id="path3766-8"
+ style="fill:#000000;fill-opacity:0.996078;fill-rule:nonzero;stroke:none;stroke-width:2.06667;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal;filter:url(#filter3168)" />
+ <g
+ transform="translate(-0.16912973,-2.7675262)"
+ id="g2933">
+ <circle
+ r="23.55442"
+ cy="197.64726"
+ cx="174.25737"
+ id="path3766"
+ style="fill:url(#linearGradient2918);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26613;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <ellipse
+ ry="3.5370526"
+ rx="1.6651245"
+ cy="191.02161"
+ cx="164.32909"
+ id="path3794"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78783;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <ellipse
+ ry="3.5370526"
+ rx="1.6651245"
+ cy="190.92998"
+ cx="183.73766"
+ id="path3794-1"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78783;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <g
+ transform="translate(4.4158622,31.006934)"
+ id="g1035">
+ <rect
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0851603;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect3680"
+ width="6.2427411"
+ height="20.71139"
+ x="142.70897"
+ y="157.49884" />
+ <path
+ sodipodi:type="spiral"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path3772"
+ sodipodi:cx="1292.2246"
+ sodipodi:cy="-55.781796"
+ sodipodi:expansion="1"
+ sodipodi:revolution="3.02601"
+ sodipodi:radius="39.10619"
+ sodipodi:argument="-19.247704"
+ sodipodi:t0="0.85191101"
+ transform="matrix(0.68412502,0.09907965,-0.0858267,0.8299174,-720.64463,86.204294)"
+ d="m 1259.0482,-58.817824 c 0.568,-19.184701 17.5934,-34.020666 36.5069,-33.357732 16.1054,0.564507 30.1652,11.938063 34.7034,27.298741" />
+ <rect
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0851603;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect3680-6"
+ width="6.2427411"
+ height="20.71139"
+ x="191.06956"
+ y="156.7856" />
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/ALP.svg b/ALP.svg
deleted file mode 100644
index 11a8a9d..0000000
--- a/ALP.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="32px"
- height="32px"
- viewBox="0 0 32 32"
- version="1.1"
- id="SVGRoot"
- inkscape:version="0.92.4 5da689c313, 2019-01-14"
- sodipodi:docname="ALP.svg">
- <defs
- id="defs23">
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient1815"
- id="linearGradient1849"
- x1="191.35619"
- y1="77.545326"
- x2="165.94176"
- y2="36.145283"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.6679636,0,0,1.6679636,-180.21985,-725.61614)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient1815">
- <stop
- style="stop-color:#008000;stop-opacity:1"
- offset="0"
- id="stop1811" />
- <stop
- style="stop-color:#000080;stop-opacity:1"
- offset="1"
- id="stop1813" />
- </linearGradient>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.313708"
- inkscape:cx="17.930357"
- inkscape:cy="8.2669824"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1920"
- inkscape:window-height="974"
- inkscape:window-x="0"
- inkscape:window-y="36"
- inkscape:window-maximized="1"
- inkscape:grid-bbox="true" />
- <metadata
- id="metadata26">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- transform="matrix(0.17705736,0,0,0.17705736,-3.9152667,126.91168)"
- id="g1147"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <path
- style="display:inline;fill:url(#linearGradient1849);fill-opacity:1;stroke-width:0.39826357"
- id="path817-7"
- sodipodi:type="arc"
- sodipodi:cx="113.56826"
- sodipodi:cy="-626.15546"
- sodipodi:rx="86.480103"
- sodipodi:ry="86.480103"
- sodipodi:start="0"
- sodipodi:end="6.2105971"
- sodipodi:open="true"
- d="m 200.04836,-626.15546 a 86.480103,86.480103 0 0 1 -84.91083,86.46587 86.480103,86.480103 0 0 1 -87.99242,-83.32784 86.480103,86.480103 0 0 1 81.7174,-89.49 86.480103,86.480103 0 0 1 90.95812,80.08005" />
- <path
- style="display:inline;fill:#5aa02c;fill-opacity:1;stroke-width:0.58780181"
- id="path819-0"
- sodipodi:type="arc"
- sodipodi:cx="113.56826"
- sodipodi:cy="-626.15546"
- sodipodi:rx="77.253967"
- sodipodi:ry="77.253967"
- sodipodi:start="0"
- sodipodi:end="6.2105971"
- sodipodi:open="true"
- d="m 190.82223,-626.15546 a 77.253967,77.253967 0 0 1 -75.85212,77.24125 77.253967,77.253967 0 0 1 -78.604941,-74.438 77.253967,77.253967 0 0 1 72.999371,-79.94276 77.253967,77.253967 0 0 1 81.25425,71.53671" />
- <path
- style="fill:#ffffff;stroke-width:0.08870116"
- inkscape:connector-curvature="0"
- d="m 155.94806,-608.99878 h -28.3844 c -7.84115,0 -14.19216,6.35103 -14.19216,14.19218 0,7.84118 6.35101,14.1922 14.19216,14.1922 3.97385,0 7.55736,-1.63212 10.12969,-4.25766 h 8.11618 c 2.57232,2.62554 6.16473,4.25766 10.12968,4.25766 7.84115,0 14.19215,-6.35101 14.19215,-14.1922 0,-7.84115 -6.34212,-14.19218 -14.1833,-14.19218 z m -19.86905,15.96623 c 0,0.58545 -0.479,1.06437 -1.06442,1.06437 h -4.61247 v 4.61249 c 0,0.58541 -0.47896,1.06441 -1.06442,1.06441 h -3.54806 c -0.58542,0 -1.0644,-0.479 -1.0644,-1.06441 v -4.61249 h -4.61245 c -0.58543,0 -1.06442,-0.47897 -1.06442,-1.06437 v -3.54809 c 0,-0.58543 0.47899,-1.0644 1.06442,-1.0644 h 4.61245 v -4.61245 c 0,-0.58543 0.47898,-1.06441 1.0644,-1.06441 h 3.54806 c 0.58546,0 1.06442,0.47898 1.06442,1.06441 v 4.61245 h 4.61247 c 0.58542,0 1.06442,0.47897 1.06442,1.0644 z m 16.32097,6.03166 c -2.35056,0 -4.25763,-1.90707 -4.25763,-4.25766 0,-2.35058 1.90707,-4.25765 4.25763,-4.25765 2.35062,0 4.25767,1.90707 4.25767,4.25765 0,2.35059 -1.90705,4.25766 -4.25767,4.25766 z m 7.09614,-7.0961 c -2.3506,0 -4.25768,-1.90708 -4.25768,-4.25766 0,-2.35055 1.90708,-4.25762 4.25768,-4.25762 2.35057,0 4.25764,1.90707 4.25764,4.25762 0,2.35058 -1.90707,4.25766 -4.25764,4.25766 z"
- id="path1581-3" />
- <path
- style="fill:#ffffff;stroke-width:0.08802874"
- inkscape:connector-curvature="0"
- d="m 98.479254,-607.66596 v 0.53336 H 87.211581 v -11.26769 h 0.533372 c 0.560277,0 1.097714,0.22264 1.493942,0.61877 l 8.621633,8.62159 a 2.1131295,2.1131295 0 0 1 0.618726,1.49397 z m -11.971928,3.35027 c -1.161952,0 -2.112663,-0.95072 -2.112663,-2.11267 v -11.97193 H 66.788914 c -1.166817,0 -2.11269,0.94588 -2.11269,2.1127 v 40.84531 c 0,1.16684 0.945873,2.11271 2.11269,2.11271 h 29.577672 c 1.166822,0 2.112668,-0.94587 2.112668,-2.11271 v -28.87341 z m -10.985439,21.17134 a 0.47535512,0.47535512 0 0 1 -0.671925,0.0216 l -5.710062,-5.35322 a 0.47535512,0.47535512 0 0 1 0,-0.69358 l 5.710062,-5.3532 a 0.47535512,0.47535512 0 0 1 0.671925,0.0216 l 1.723504,1.83851 a 0.47535512,0.47535512 0 0 1 -0.03262,0.68196 l -3.588304,3.15794 3.588304,3.15796 a 0.47535512,0.47535512 0 0 1 0.03262,0.68193 z m 4.515422,4.44362 -2.416637,-0.70158 a 0.47553119,0.47553119 0 0 1 -0.324046,-0.58908 l 5.408486,-18.62921 a 0.47553119,0.47553119 0 0 1 0.589101,-0.32402 l 2.416548,0.70159 a 0.47535512,0.47535512 0 0 1 0.323951,0.58908 l -5.408498,18.62918 a 0.47509106,0.47509106 0 0 1 -0.588905,0.32404 z m 14.154303,-9.77517 -5.710011,5.35324 a 0.47535512,0.47535512 0 0 1 -0.671925,-0.0216 l -1.723636,-1.83847 a 0.47535512,0.47535512 0 0 1 0.03265,-0.68196 l 3.588424,-3.15787 -3.588328,-3.15792 a 0.47535512,0.47535512 0 0 1 -0.03265,-0.68195 l 1.723636,-1.8385 a 0.47535512,0.47535512 0 0 1 0.671893,-0.0216 l 5.710091,5.35322 a 0.47535512,0.47535512 0 0 1 -9.6e-5,0.69359 z"
- id="path3972" />
- <path
- style="fill:#ffffff;stroke-width:0.08816871"
- inkscape:connector-curvature="0"
- d="m 61.212704,-654.75471 c 3.112359,0 5.642798,-2.53046 5.642798,-5.6428 0,-3.11235 -2.530439,-5.6428 -5.642798,-5.6428 -3.112347,0 -5.642785,2.53045 -5.642785,5.6428 0,3.11234 2.530438,5.6428 5.642785,5.6428 z m 39.499576,0 c 3.11238,0 5.64282,-2.53046 5.64282,-5.6428 0,-3.11235 -2.53044,-5.6428 -5.64282,-5.6428 -3.112362,0 -5.642792,2.53045 -5.642792,5.6428 0,3.11234 2.53043,5.6428 5.642792,5.6428 z m 2.82143,2.82138 h -5.642833 c -1.551769,0 -2.953639,0.62598 -3.976419,1.63993 3.55322,1.94855 6.074833,5.46647 6.621492,9.64569 h 5.81915 c 1.56058,0 2.8214,-1.26082 2.8214,-2.82143 v -2.8214 c 0,-3.11233 -2.53046,-5.64279 -5.64279,-5.64279 z m -22.571214,0 c 5.457654,0 9.874898,-4.41723 9.874898,-9.8749 0,-5.45762 -4.417244,-9.87488 -9.874898,-9.87488 -5.457639,0 -9.874882,4.41726 -9.874882,9.87488 0,5.45767 4.417243,9.8749 9.874882,9.8749 z m 6.771339,2.82142 h -0.731762 c -1.833939,0.88169 -3.870626,1.41069 -6.039577,1.41069 -2.168936,0 -4.19682,-0.529 -6.039548,-1.41069 h -0.731816 c -5.607522,0 -10.157029,4.54951 -10.157029,10.15703 v 2.53926 c 0,2.33647 1.895621,4.23207 4.2321,4.23207 h 25.392575 c 2.33648,0 4.232099,-1.8956 4.232099,-4.23207 v -2.53926 c 0,-5.60752 -4.549509,-10.15703 -10.157042,-10.15703 z m -19.723333,-1.18148 c -1.02275,-1.01394 -2.424634,-1.63992 -3.976399,-1.63992 h -5.642798 c -3.112347,0 -5.642798,2.53046 -5.642798,5.64278 v 2.82141 c 0,1.56059 1.260817,2.82142 2.821412,2.82142 h 5.810312 c 0.555461,-4.17922 3.07707,-7.69715 6.630271,-9.64569 z"
- id="path3983" />
- <path
- style="fill:#ffffff;stroke-width:0.09225987"
- inkscape:connector-curvature="0"
- d="m 148.63404,-668.58888 h -26.60777 c -2.43563,0 -4.41,1.97441 -4.41,4.41006 v 26.60771 c 0,2.43565 1.97437,4.41001 4.41,4.41001 h 26.60777 c 2.43565,0 4.41,-1.97436 4.41,-4.41001 v -26.60771 c 0,-2.43565 -1.97435,-4.41006 -4.41,-4.41006 z m 17.47394,3.4782 -10.11165,6.97481 v 14.52172 l 10.11165,6.96561 c 1.95595,1.34699 4.64998,-0.0278 4.64998,-2.3803 v -23.70155 c 0,-2.34338 -2.68482,-3.72733 -4.64998,-2.38029 z"
- id="path1514-6-7" />
- </g>
- </g>
-</svg>
diff --git a/Alee Audio Player.desktop b/Alee Audio Player.desktop
new file mode 100644
index 0000000..17a1a4b
--- /dev/null
+++ b/Alee Audio Player.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=Alee Audio Player
+Comment=Audio Player
+Exec=AleeAudioPlayer
+Icon=AAP
+Categories=Audio;
diff --git a/AleePlayer.pro b/Alee Audio Player.pro
index c7ffdff..3c4e2fa 100644
--- a/AleePlayer.pro
+++ b/Alee Audio Player.pro
@@ -17,11 +17,13 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
about.cpp \
+ library.cpp \
main.cpp \
player.cpp
HEADERS += \
about.h \
+ library.h \
player.h
FORMS += \
@@ -29,21 +31,24 @@ FORMS += \
player.ui
TRANSLATIONS += \
- AleePlayer_en_CA.ts
+ translations/en_CA.ts \
+ translations/fr_CA.ts \
+ translations/vi_VN.ts
unix:!macx:!android {
- TARGET = AleePlayer
+ TARGET = AleeAudioPlayer
target.path = /usr/bin
desktop.path = /usr/share/applications
- desktop.files = AleePlayer.desktop
+ desktop.files = Alee Audio Player.desktop
icon.path = /usr/share/icons/hicolor/scalable/apps/
- icon.files = ALP.svg
+ icon.files = AAP.svg
+ LIBS += -ltag
INSTALLS += target desktop icon
}
diff --git a/AleePlayer.desktop b/AleePlayer.desktop
deleted file mode 100644
index 8c5b8aa..0000000
--- a/AleePlayer.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=AleePlayer
-Comment=Music Player by Alee Productions
-Exec=AleePlayer
-Icon=ALP
-Categories=Audio;
diff --git a/AleePlayer_en_CA.ts b/AleePlayer_en_CA.ts
deleted file mode 100644
index 3cee958..0000000
--- a/AleePlayer_en_CA.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="AleePlayer_en_CA"></TS>
diff --git a/README.md b/README.md
index af52d62..1c21cec 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# AleePlayer
+# Alee Audio Player
An audio player written in Qt
[![Build status](https://ci.appveyor.com/api/projects/status/6ifpgxms79l4q0u2?svg=true)](https://ci.appveyor.com/project/Alee14/aleeaudioplayer) [![Build Status](https://travis-ci.org/aleeproductions/AleePlayer.svg?branch=master)](https://travis-ci.org/aleeproductions/AleePlayer)
diff --git a/about.cpp b/about.cpp
index e3fde67..e5ebef7 100644
--- a/about.cpp
+++ b/about.cpp
@@ -1,5 +1,23 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
#include "about.h"
#include "ui_about.h"
+#include <QDebug>
About::About(QWidget *parent) :
QDialog(parent),
@@ -16,5 +34,6 @@ About::About(QWidget *parent) :
About::~About()
{
+ qDebug() << "Closing about dialog";
delete ui;
}
diff --git a/about.h b/about.h
index a88d2ac..f2c91ff 100644
--- a/about.h
+++ b/about.h
@@ -1,3 +1,20 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
#ifndef ABOUT_H
#define ABOUT_H
diff --git a/about.ui b/about.ui
index ebe6256..2bd6eab 100644
--- a/about.ui
+++ b/about.ui
@@ -23,7 +23,7 @@
</size>
</property>
<property name="windowTitle">
- <string>About</string>
+ <string>About - Alee Audio Player</string>
</property>
<property name="modal">
<bool>false</bool>
@@ -53,22 +53,25 @@
</font>
</property>
<property name="text">
- <string>AleePlayer 0.1 by Alee Productions</string>
+ <string>Alee Audio Player 0.2 by Alee Productions</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
</widget>
</item>
<item>
- <widget class="QLabel" name="label_2">
+ <widget class="QLabel" name="label_4">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
- <string>Licensed with GPL-3.0</string>
+ <string>Written in C++ and Qt, Licensed with GPL-3.0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@@ -108,23 +111,23 @@
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Noto Sans';&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; AleePlayer: Music player in Qt &lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; Copyright (C) 2020 Alee Productions&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Noto Sans';&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; This program is free software: you can redistribute it and/or modify&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; the Free Software Foundation, either version 3 of the License, or&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; (at your option) any later version.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Noto Sans';&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; GNU General Public License for more details.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Noto Sans';&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans';&quot;&gt; along with this program. If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Noto Sans';&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Alee Audio Player: An audio player written in Qt&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Copyright (C) 2020 Alee Productions&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is free software: you can redistribute it and/or modify&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; it under the terms of the GNU General Public License as published by&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; the Free Software Foundation, either version 3 of the License, or&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; (at your option) any later version.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is distributed in the hope that it will be useful,&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GNU General Public License for more details.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; You should have received a copy of the GNU General Public License&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; along with this program. If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
diff --git a/appveyor.yml b/appveyor.yml
index e4d7951..a8fc5ca 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -10,8 +10,8 @@ clone_depth: 5
environment:
GITHUB_TOKEN:
secure: hFxvrP00pBfZqJGfgLLZgkXPI5ZPGND3ToEURxPW5K5PYcuNaG0oiipX5b/O+dDR
- REPO_SLUG: aleeproductions/AleePlayer
- deploy_project: AleePlayer
+ REPO_SLUG: aleeproductions/Alee-Audio-Player
+ deploy_project: Alee Audio Player
deploy_version: ''
deploy_artifact: ''
@@ -22,7 +22,7 @@ test: off
artifacts:
- path: deploy
- name: AleePlayer-Windows
+ name: Alee-Audio-Player-Windows
before_deploy:
diff --git a/library.cpp b/library.cpp
new file mode 100644
index 0000000..ffba966
--- /dev/null
+++ b/library.cpp
@@ -0,0 +1,54 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
+#include "library.h"
+
+Library::Library(QObject *parent)
+ : QAbstractListModel(parent)
+{
+}
+
+int Library::rowCount(const QModelIndex &parent) const
+{
+ // For list models only the root node (an invalid parent) should return the list's size. For all
+ // other (valid) parents, rowCount() should return 0 so that it does not become a tree model.
+ if (parent.isValid())
+ return 0;
+
+ return 3;
+
+}
+
+QVariant Library::data(const QModelIndex &index, int role) const
+{
+
+ if (!index.isValid())
+ return QVariant();
+
+ if (role == Qt::DisplayRole) {
+ switch (index.row()) {
+ case 0:
+ return "Item 1";
+ case 1:
+ return "Item 2";
+ case 2:
+ return "Item 3";
+ }
+ }
+
+ return QVariant();
+}
diff --git a/library.h b/library.h
new file mode 100644
index 0000000..c88f49d
--- /dev/null
+++ b/library.h
@@ -0,0 +1,39 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
+#ifndef LIBRARY_H
+#define LIBRARY_H
+
+#include <QAbstractListModel>
+#include <QAbstractTableModel>
+
+class Library : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ explicit Library(QObject *parent = nullptr);
+
+ // Basic functionality:
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+private:
+};
+
+#endif // LIBRARY_H
diff --git a/main.cpp b/main.cpp
index 85f57aa..e417938 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,13 +1,48 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
#include "player.h"
#include <QMessageBox>
#include <QDebug>
+#include <QTranslator>
+#include <QFile>
+#include <QDir>
#include <QApplication>
int main(int argc, char *argv[])
{
- qInfo() << "AleePlayer: A music player by Alee Productions. Licensed with GPL-3.0\n";
+ qInfo() << "Alee Audio Player: A music player by Alee Productions. Licensed with GPL-3.0.\n";
+
+ qDebug() << "Creating files...";
+
+ //Change this to appdata or .local/share in linux
+ //QDir directory(QDir::homePath() + "/.alee-productions/Alee Audio Player");
+
+ //File file(directory.absoluteFilePath("test.txt"));
+
+ //file.open(QFile::WriteOnly);
+ //file.close();
+
QApplication a(argc, argv);
+ QTranslator translator;
+ translator.load(QLocale(), "/home/andrew/Documents/GitHub/Alee Audio Player/translations/");
+ a.installTranslator(&translator);
+
Player musicPlayer;
musicPlayer.show();
return a.exec();
diff --git a/player.cpp b/player.cpp
index 69fdd8a..4991824 100644
--- a/player.cpp
+++ b/player.cpp
@@ -1,32 +1,60 @@
-#include <QMediaPlayer>
-#include <QDebug>
-#include <QFileDialog>
-#include <QMessageBox>
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
#include "player.h"
#include "ui_player.h"
#include "about.h"
+#include "library.h"
-void Player::mFileDialog()
+void Player::loadFile()
{
- QString mFile;
QMessageBox msgbox;
- mFile = QFileDialog::getOpenFileName(this, "Open any audio file", QDir::homePath(), tr("Audio Files (*.mp3 *.wav *.ogg *.flac)"));
+
+ mFile = QFileDialog::getOpenFileName(this, tr("Open any audio file"), QDir::homePath(), tr("Audio Files (*.mp3 *.wav *.ogg *.flac)"));
if (mFile == NULL) {
- qDebug() << "File cannot be found";
- msgbox.setWindowTitle("Uh oh! An error has occured!");
- msgbox.setText("File is invalid. Maybe try loading a valid audio file.");
+ qDebug() << tr("File cannot be found");
+ msgbox.setWindowTitle(tr("Uh oh! An error has occured!"));
+ msgbox.setText(tr("File is invalid. Maybe try loading a valid audio file."));
msgbox.setIcon(QMessageBox::Critical);
msgbox.exec();
return;
} else {
mPlayer->setMedia(QUrl::fromLocalFile(mFile));
- qDebug() << "Opening" << mFile;
- msgbox.setWindowTitle("Success!");
- msgbox.setText("This audio file has been loaded.");
+ qDebug() << tr("Opening") << mFile;
+ msgbox.setWindowTitle(tr("Success!"));
+ msgbox.setText(tr("This audio file has been loaded."));
msgbox.setIcon(QMessageBox::Information);
msgbox.exec();
ui->volumeSlider->setValue(100);
- ui->playButton->setText(tr("Play"));
+ ui->playbackSlider->setEnabled(true);
+
+ char* fn = new char [mFile.toStdString().size()+1];
+ strcpy( fn, mFile.toStdString().c_str() );
+ TagLib::FileRef* fileref = new TagLib::FileRef(fn);
+
+ if (fileref->tag() != nullptr) {
+ TagLib::String title = fileref->tag()->title();
+ TagLib::String artist = fileref->tag()->artist();
+ const char* title_ = title.to8Bit(true).c_str();
+ const char* artist_ = artist.to8Bit(true).c_str();
+ ui->labelTitle->setText(title_);
+ ui->labelAuthor->setText(artist_);
+ }
+
return;
}
}
@@ -38,6 +66,7 @@ Player::Player(QWidget *parent)
, ui(new Ui::Player)
{
ui->setupUi(this);
+ ui->library->setModel(new Library());
connect(mPlayer, &QMediaPlayer::positionChanged, this, &Player::on_positionChanged);
connect(mPlayer, &QMediaPlayer::durationChanged, this, &Player::on_durationChanged);
@@ -46,7 +75,7 @@ Player::Player(QWidget *parent)
Player::~Player()
{
- qInfo() << "Closing AleePlayer...";
+ qInfo() << tr("Closing Alee Audio Player...");
mPlayer->deleteLater();
delete ui;
}
@@ -62,11 +91,11 @@ void Player::on_playButton_pressed()
ui->volumeSlider->setEnabled(true);
if (mPlayer->state() == mPlayer->PlayingState) {
- qDebug() << "Pausing music...";
+ qDebug() << tr("Pausing music...");
mPlayer->pause();
ui->playButton->setText(tr("Play"));
} else {
- qDebug() << "Playing music...";
+ qDebug() << tr("Playing music...");
mPlayer->play();
ui->playButton->setText(tr("Pause"));
}
@@ -75,9 +104,8 @@ void Player::on_playButton_pressed()
void Player::on_stopButton_pressed()
{
- qInfo() << "Stopping music...";
+ qInfo() << tr("Stopping music...");
mPlayer->stop();
- ui->volumeSlider->setEnabled(false);
ui->volumeSlider->setValue(100);
ui->playbackSlider->setEnabled(false);
ui->playbackSlider->setValue(0);
@@ -85,19 +113,19 @@ void Player::on_stopButton_pressed()
void Player::on_actionAbout_triggered()
{
- qDebug() << "Opening dialog";
+ qDebug() << tr("Opening about dialog");
About about;
about.exec();
}
void Player::on_mediaButton_pressed()
{
- mFileDialog();
+ loadFile();
}
void Player::on_actionOpen_triggered()
{
- mFileDialog();
+ loadFile();
}
diff --git a/player.h b/player.h
index efecef9..a95ff16 100644
--- a/player.h
+++ b/player.h
@@ -1,8 +1,29 @@
+/*
+ Alee Audio Player: Audio player in Qt
+ Copyright (C) 2020 Alee Productions
+
+ 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/>.
+*/
#ifndef PLAYER_H
#define PLAYER_H
#include <QMediaPlayer>
-
+#include <QStringListModel>
#include <QMainWindow>
+#include <QDebug>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <taglib/fileref.h>
QT_BEGIN_NAMESPACE
namespace Ui { class Player; }
@@ -16,8 +37,12 @@ public:
Player(QWidget *parent = nullptr);
~Player();
QMediaPlayer* mPlayer = new QMediaPlayer();
+ QString mFile;
+
+ int amount = 0;
private slots:
+
void on_actionQuit_triggered();
void on_playButton_pressed();
@@ -30,7 +55,7 @@ private slots:
void on_stopButton_pressed();
- void mFileDialog();
+ void loadFile();
void on_volumeSlider_sliderMoved(int position);
@@ -42,5 +67,6 @@ private slots:
private:
Ui::Player *ui;
+ QStringListModel *model;
};
#endif // PLAYER_H
diff --git a/player.ui b/player.ui
index 312c8d7..22babe4 100644
--- a/player.ui
+++ b/player.ui
@@ -6,171 +6,176 @@
<rect>
<x>0</x>
<y>0</y>
- <width>800</width>
- <height>607</height>
+ <width>837</width>
+ <height>680</height>
</rect>
</property>
<property name="windowTitle">
- <string>AleePlayer</string>
+ <string>Alee Audio Player</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>AAP.svg</normaloff>AAP.svg</iconset>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0" colspan="8">
- <widget class="QSlider" name="playbackSlider">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="5">
- <widget class="QPushButton" name="mediaButton">
- <property name="text">
- <string>Browse</string>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- </widget>
+ <item row="4" column="1">
+ <widget class="QWidget" name="widget" native="true"/>
</item>
- <item row="3" column="2">
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="5" colspan="3">
- <widget class="QSlider" name="volumeSlider">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="value">
- <number>99</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="0" column="0" colspan="8">
+ <item row="1" column="0" colspan="8">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
- <widget class="QWidget" name="tab">
+ <widget class="QWidget" name="tabLibrary">
<attribute name="title">
<string>Library</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
- <widget class="QLabel" name="labelComingSoon">
- <property name="font">
- <font>
- <pointsize>14</pointsize>
- </font>
- </property>
- <property name="text">
- <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Coming soon in a later update!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
+ <widget class="QTreeView" name="library"/>
</item>
</layout>
</widget>
- <widget class="QWidget" name="tab_2">
+ <widget class="QWidget" name="tabPlaylist">
<attribute name="title">
<string>Playlist</string>
</attribute>
+ <layout class="QGridLayout" name="gridLayout_4"/>
</widget>
</widget>
</item>
- <item row="3" column="4">
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="1">
- <widget class="QPushButton" name="playButton">
- <property name="text">
- <string>Play</string>
- </property>
- <property name="checkable">
- <bool>false</bool>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- <property name="flat">
+ <item row="4" column="4">
+ <widget class="QSlider" name="playbackSlider">
+ <property name="enabled">
<bool>false</bool>
</property>
- </widget>
- </item>
- <item row="3" column="7">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="0">
- <spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="5" column="5">
- <widget class="QLabel" name="labelVolume">
- <property name="text">
- <string>Volume</string>
- </property>
</widget>
</item>
- <item row="3" column="3">
- <widget class="QPushButton" name="stopButton">
- <property name="text">
- <string>Stop</string>
- </property>
- <property name="flat">
+ <item row="2" column="4" colspan="2">
+ <widget class="QFrame" name="frame">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="autoFillBackground">
<bool>false</bool>
</property>
+ <property name="frameShape">
+ <enum>QFrame::Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="3" column="3">
+ <widget class="QPushButton" name="stopButton">
+ <property name="text">
+ <string>Stop</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="4">
+ <widget class="QPushButton" name="mediaButton">
+ <property name="text">
+ <string>Browse</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="3">
+ <widget class="QLabel" name="labelVolume">
+ <property name="text">
+ <string>Volume</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelTitle">
+ <property name="font">
+ <font>
+ <pointsize>14</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Title</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QPushButton" name="playButton">
+ <property name="text">
+ <string>Play</string>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="3" colspan="2">
+ <widget class="QSlider" name="volumeSlider">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="value">
+ <number>99</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="tickPosition">
+ <enum>QSlider::NoTicks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Maximum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="labelAuthor">
+ <property name="font">
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Author</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</widget>
</item>
</layout>
@@ -180,7 +185,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>800</width>
+ <width>837</width>
<height>23</height>
</rect>
</property>
@@ -190,10 +195,16 @@
</property>
<addaction name="actionOpen"/>
<addaction name="separator"/>
- <addaction name="actionAbout"/>
<addaction name="actionQuit"/>
</widget>
+ <widget class="QMenu" name="menuHelp">
+ <property name="title">
+ <string>Help</string>
+ </property>
+ <addaction name="actionAbout"/>
+ </widget>
<addaction name="menuFile"/>
+ <addaction name="menuHelp"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionQuit">
@@ -201,7 +212,7 @@
<string>Quit</string>
</property>
<property name="shortcut">
- <string>Ctrl+W</string>
+ <string>Ctrl+Q</string>
</property>
</action>
<action name="actionAbout">
diff --git a/scripts/appveyor.bat b/scripts/appveyor.bat
index 7d3c32f..6326e9e 100644
--- a/scripts/appveyor.bat
+++ b/scripts/appveyor.bat
@@ -8,9 +8,9 @@ set QTDIR=C:\Qt\5.12\msvc2017_64
set PATH=%PATH%;%QTDIR%\bin
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
-qmake AleePlayer.pro "CONFIG+=release"
+qmake "Alee Audio Player.pro" "CONFIG+=release"
nmake release
mkdir deploy
-copy release\AleePlayer.exe deploy
+copy release\AleeAudioPlayer.exe deploy
cd deploy
-windeployqt AleePlayer.exe -multimedia
+windeployqt AleeAudioPlayer.exe -multimedia
diff --git a/translations/en_CA.ts b/translations/en_CA.ts
new file mode 100644
index 0000000..090d22b
--- /dev/null
+++ b/translations/en_CA.ts
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_CA">
+<context>
+ <name>About</name>
+ <message>
+ <location filename="../about.ui" line="26"/>
+ <source>About - Alee Music Player</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="56"/>
+ <source>Alee Music Player 0.2 by Alee Productions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="74"/>
+ <source>Licensed with GPL-3.0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="84"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://alee-productions.xyz&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;Website&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="110"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Alee Music Player: An audio player written in Qt&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Copyright (C) 2020 Alee Productions&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is free software: you can redistribute it and/or modify&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; it under the terms of the GNU General Public License as published by&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; the Free Software Foundation, either version 3 of the License, or&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; (at your option) any later version.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is distributed in the hope that it will be useful,&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GNU General Public License for more details.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; You should have received a copy of the GNU General Public License&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; along with this program. If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Player</name>
+ <message>
+ <location filename="../player.ui" line="14"/>
+ <source>Alee Music Player</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="28"/>
+ <source>Library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="38"/>
+ <source>Playlist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="75"/>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="85"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="95"/>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="107"/>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="114"/>
+ <location filename="../player.cpp" line="42"/>
+ <location filename="../player.cpp" line="82"/>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="178"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="187"/>
+ <source>View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="196"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="199"/>
+ <source>Ctrl+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="204"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="209"/>
+ <source>Open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="212"/>
+ <source>Ctrl+O</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Open any audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Audio Files (*.mp3 *.wav *.ogg *.flac *.mp4)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="28"/>
+ <source>File cannot be found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="29"/>
+ <source>Uh oh! An error has occured!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="30"/>
+ <source>File is invalid. Maybe try loading a valid audio file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="36"/>
+ <source>Opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="37"/>
+ <source>Success!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="38"/>
+ <source>This audio file has been loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="64"/>
+ <source>Closing AleePlayer...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="80"/>
+ <source>Pausing music...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="84"/>
+ <source>Playing music...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="86"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="95"/>
+ <source>Stopping music...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="105"/>
+ <source>Opening about dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/fr_CA.ts b/translations/fr_CA.ts
new file mode 100644
index 0000000..ce4ff90
--- /dev/null
+++ b/translations/fr_CA.ts
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_CA">
+<context>
+ <name>About</name>
+ <message>
+ <location filename="../about.ui" line="26"/>
+ <source>About - Alee Music Player</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="56"/>
+ <source>Alee Music Player 0.2 by Alee Productions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="74"/>
+ <source>Licensed with GPL-3.0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="84"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://alee-productions.xyz&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;Website&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="110"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Alee Music Player: An audio player written in Qt&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Copyright (C) 2020 Alee Productions&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is free software: you can redistribute it and/or modify&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; it under the terms of the GNU General Public License as published by&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; the Free Software Foundation, either version 3 of the License, or&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; (at your option) any later version.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is distributed in the hope that it will be useful,&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GNU General Public License for more details.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; You should have received a copy of the GNU General Public License&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; along with this program. If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Player</name>
+ <message>
+ <location filename="../player.ui" line="14"/>
+ <source>Alee Music Player</source>
+ <translation>Alee Music Player</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="28"/>
+ <source>Library</source>
+ <translation>Bibliothèque</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="38"/>
+ <source>Playlist</source>
+ <translation>Liste de chansons</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="75"/>
+ <source>Stop</source>
+ <translation>Arrêt</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="85"/>
+ <source>Browse</source>
+ <translation>Feuilleter</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="95"/>
+ <source>Volume</source>
+ <translation>Le volume</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="107"/>
+ <source>Title</source>
+ <translation>Titre</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="114"/>
+ <location filename="../player.cpp" line="42"/>
+ <location filename="../player.cpp" line="82"/>
+ <source>Play</source>
+ <translation>Jouer</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="178"/>
+ <source>File</source>
+ <translation>Fichier</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="187"/>
+ <source>View</source>
+ <translation>Vue</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="196"/>
+ <source>Quit</source>
+ <translation>Quitter</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="199"/>
+ <source>Ctrl+Q</source>
+ <translation>Ctrl + Q</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="204"/>
+ <source>About</source>
+ <translation>À propos du logiciel</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="209"/>
+ <source>Open</source>
+ <translation>Ouvrir</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="212"/>
+ <source>Ctrl+O</source>
+ <translation>Ctrl+O</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Open any audio file</source>
+ <translation>Ouvrir n&apos;importe quel fichier audio</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Audio Files (*.mp3 *.wav *.ogg *.flac *.mp4)</source>
+ <translation>Fichiers Audio (*.mp3 *.wav *.ogg *.flac *.mp4)</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="28"/>
+ <source>File cannot be found</source>
+ <translation>Le fichier est introuvable</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="29"/>
+ <source>Uh oh! An error has occured!</source>
+ <translation>Euh oh! Une erreur est survenue!</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="30"/>
+ <source>File is invalid. Maybe try loading a valid audio file.</source>
+ <translation>Le fichier n&apos;est pas valide. Essayez peut-être de charger un fichier audio valide.</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="36"/>
+ <source>Opening</source>
+ <translation>Overture</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="37"/>
+ <source>Success!</source>
+ <translation>Succès!</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="38"/>
+ <source>This audio file has been loaded.</source>
+ <translation>Ce fichier audio a été chargé.</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="64"/>
+ <source>Closing AleePlayer...</source>
+ <translation>Fermeture AleePlayer...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="80"/>
+ <source>Pausing music...</source>
+ <translation>Pause la musique...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="84"/>
+ <source>Playing music...</source>
+ <translation>Jouer la musique...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="86"/>
+ <source>Pause</source>
+ <translation>Pause</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="95"/>
+ <source>Stopping music...</source>
+ <translation>Arrêtez la musique...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="105"/>
+ <source>Opening about dialog</source>
+ <translation>Boîte de dialogue d&apos;ouverture</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/vi_VN.ts b/translations/vi_VN.ts
new file mode 100644
index 0000000..85ffb90
--- /dev/null
+++ b/translations/vi_VN.ts
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="vi_VN" sourcelanguage="en_US">
+<context>
+ <name>About</name>
+ <message>
+ <location filename="../about.ui" line="26"/>
+ <source>About - Alee Music Player</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="56"/>
+ <source>Alee Music Player 0.2 by Alee Productions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="74"/>
+ <source>Licensed with GPL-3.0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="84"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://alee-productions.xyz&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;Website&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://alee-productions.xyz&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;Trang Web&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../about.ui" line="110"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Alee Music Player: An audio player written in Qt&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Copyright (C) 2020 Alee Productions&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is free software: you can redistribute it and/or modify&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; it under the terms of the GNU General Public License as published by&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; the Free Software Foundation, either version 3 of the License, or&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; (at your option) any later version.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program is distributed in the hope that it will be useful,&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GNU General Public License for more details.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; You should have received a copy of the GNU General Public License&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; along with this program. If not, see &amp;lt;https://www.gnu.org/licenses/&amp;gt;.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Player</name>
+ <message>
+ <location filename="../player.ui" line="14"/>
+ <source>Alee Music Player</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="28"/>
+ <source>Library</source>
+ <translation>Thư viện</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="38"/>
+ <source>Playlist</source>
+ <translation>Hàng phát</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="75"/>
+ <source>Stop</source>
+ <translation>Dừng lại</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="85"/>
+ <source>Browse</source>
+ <translation>Duyệt</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="95"/>
+ <source>Volume</source>
+ <translation>Âm lượng</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="107"/>
+ <source>Title</source>
+ <translation>Tiêu đề</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="114"/>
+ <location filename="../player.cpp" line="42"/>
+ <location filename="../player.cpp" line="82"/>
+ <source>Play</source>
+ <translation>Phát</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="178"/>
+ <source>File</source>
+ <translation>Tệp</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="187"/>
+ <source>View</source>
+ <translation>Xem</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="196"/>
+ <source>Quit</source>
+ <translation>Thoát</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="199"/>
+ <source>Ctrl+Q</source>
+ <translation>Ctrl+Q</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="204"/>
+ <source>About</source>
+ <translation>Giới Thiệu</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="209"/>
+ <source>Open</source>
+ <translation>Mở</translation>
+ </message>
+ <message>
+ <location filename="../player.ui" line="212"/>
+ <source>Ctrl+O</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Open any audio file</source>
+ <translation>Mở bất kỳ tệp nhạc nào</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="26"/>
+ <source>Audio Files (*.mp3 *.wav *.ogg *.flac *.mp4)</source>
+ <translation>Tệp nhạc (*.mp3 *.wav *.ogg *.flac *.mp4)</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="28"/>
+ <source>File cannot be found</source>
+ <translation>Không thể tìm tệp</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="29"/>
+ <source>Uh oh! An error has occured!</source>
+ <translation>Chà, một lỗi đã xảy ra!</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="30"/>
+ <source>File is invalid. Maybe try loading a valid audio file.</source>
+ <translation>Tệp không hợp lệ. Hãy tải một tệp nhạc hợp lệ.</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="36"/>
+ <source>Opening</source>
+ <translation>Đang mở</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="37"/>
+ <source>Success!</source>
+ <translation>Tốt đẹp!</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="38"/>
+ <source>This audio file has been loaded.</source>
+ <translation>Tệp nhạc đã bị tải.</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="64"/>
+ <source>Closing AleePlayer...</source>
+ <translation>Đang thoát AleePlayer...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="80"/>
+ <source>Pausing music...</source>
+ <translation>Đang tạm dừng nhạc...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="84"/>
+ <source>Playing music...</source>
+ <translation>Đang phát nhạc...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="86"/>
+ <source>Pause</source>
+ <translation>Tạm dừng</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="95"/>
+ <source>Stopping music...</source>
+ <translation>Đang dừng lại nhắc...</translation>
+ </message>
+ <message>
+ <location filename="../player.cpp" line="105"/>
+ <source>Opening about dialog</source>
+ <translation>Đang mở cửa sổ giới thiệu</translation>
+ </message>
+</context>
+</TS>