Important fixes to 0.5.0

This commit is contained in:
NaitLee 2022-05-08 01:34:15 +08:00
parent 367c901259
commit 39e29deb5b
12 changed files with 91 additions and 57 deletions

2
.gitignore vendored
View File

@ -14,7 +14,7 @@ build-android/dist
*.apk *.apk
*.apk.* *.apk.*
cat-printer*.zip cat-printer*.zip
*-sha256.txt cat-printer-sha256-*.txt
# bleak, the bare pip package as a folder # bleak, the bare pip package as a folder
build-common/bleak build-common/bleak
# python embeddable package, with bleak_winrt inside # python embeddable package, with bleak_winrt inside

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# For ultimate laziness! # For ultimate laziness!
rm -rf cat-printer-*.zip cat-printer-*.apk* cat-printer-*-sha256.txt rm -rf cat-printer-*.zip cat-printer-*.apk* cat-printer-sha256-*.txt
echo -n 'Version tag: ' echo -n 'Version tag: '
read version read version
echo -n $version > version echo -n $version > version
@ -16,5 +16,5 @@ echo 'Signing apk with keyfile...'
./4-sign.sh $signkey ./4-sign.sh $signkey
cd ../ cd ../
echo 'SHA256 Hash...' echo 'SHA256 Hash...'
sha256sum cat-printer-* > cat-printer-$version-sha256.txt sha256sum cat-printer-* > cat-printer-sha256-$version.txt
echo 'Complete!' echo 'Complete!'

View File

@ -131,7 +131,7 @@ class PrinterError(Exception):
def __init__(self, *args): def __init__(self, *args):
super().__init__(*args) super().__init__(*args)
self.message = args[0] self.message = args[0]
self.message_localized = i18n(args) self.message_localized = i18n(*args)
class PrinterData(): class PrinterData():
''' The image data to be used by `PrinterDriver`. ''' The image data to be used by `PrinterDriver`.
@ -277,6 +277,7 @@ class PrinterDriver(Commander):
rtl: bool = False rtl: bool = False
energy: int = None energy: int = None
quality: int = 24
mtu: int = 200 mtu: int = 200
@ -427,20 +428,23 @@ class PrinterDriver(Commander):
def _prepare(self): def _prepare(self):
self.get_device_state() self.get_device_state()
self.set_dpi_as_200()
self.use_energy_control(True)
if self.energy is not None:
self.set_energy(self.energy * 0xff)
if self.model.is_new_kind: if self.model.is_new_kind:
self.start_printing_new() self.start_printing_new()
else: else:
self.start_printing() self.start_printing()
self.set_speed(8) # already fine if above 4. maybe just enough self.set_dpi_as_200()
self.get_device_state() if self.quality: # well, slower makes stable heating
self.set_speed(self.quality)
if self.energy is not None:
self.set_energy(self.energy * 0xff)
self.apply_energy()
self.update_device() self.update_device()
self.flush()
self.start_lattice()
def _finish(self): def _finish(self):
self.end_lattice() self.end_lattice()
self.set_speed(8)
self.feed_paper(128) self.feed_paper(128)
self.get_device_state() self.get_device_state()
self.flush() self.flush()
@ -450,7 +454,6 @@ class PrinterDriver(Commander):
flip(data.data, data.width, data.height, self.flip_h, self.flip_v, overwrite=True) flip(data.data, data.width, data.height, self.flip_h, self.flip_v, overwrite=True)
self._prepare() self._prepare()
# TODO: consider compression on new devices # TODO: consider compression on new devices
self.start_lattice()
for chunk in data.read(paper_width // 8): for chunk in data.read(paper_width // 8):
if self.dry_run: if self.dry_run:
chunk = b'\x00' * len(chunk) chunk = b'\x00' * len(chunk)
@ -615,8 +618,10 @@ def _main():
help=i18n('image-printing-options')) help=i18n('image-printing-options'))
parser.add_argument('-t', '--text', metavar='Size[,FontFamily][,pf2][,nowrap][,rtl]', type=str, parser.add_argument('-t', '--text', metavar='Size[,FontFamily][,pf2][,nowrap][,rtl]', type=str,
default='', help=i18n('text-printing-mode-with-options')) default='', help=i18n('text-printing-mode-with-options'))
parser.add_argument('-e', '--energy', metavar='<0.0-1.0>', type=float, default=None, parser.add_argument('-e', '--energy', metavar='0.0-1.0', type=float, default=None,
help=i18n('control-printer-thermal-strength')) help=i18n('control-printer-thermal-strength'))
parser.add_argument('-q', '--quality', metavar='1-4', type=int, default=3,
help=i18n('print-quality'))
parser.add_argument('-d', '--dry', action='store_true', parser.add_argument('-d', '--dry', action='store_true',
help=i18n('dry-run-test-print-process-only')) help=i18n('dry-run-test-print-process-only'))
parser.add_argument('-f', '--fake', metavar='XY01', type=str, default='', parser.add_argument('-f', '--fake', metavar='XY01', type=str, default='',
@ -638,7 +643,9 @@ def _main():
printer.scan_timeout = float(scan_param[0]) printer.scan_timeout = float(scan_param[0])
identifier = ','.join(scan_param[1:]) identifier = ','.join(scan_param[1:])
if args.energy is not None: if args.energy is not None:
printer.energy = args.energy * 0xff printer.energy = int(args.energy * 0xff)
if args.quality is not None:
printer.quality = 4 * (args.quality + 5)
image_param = args.image.split(',') image_param = args.image.split(',')
if 'flip' in image_param: if 'flip' in image_param:

View File

@ -82,12 +82,10 @@ class Commander(metaclass=ABCMeta):
'Start printing on newer printers' 'Start printing on newer printers'
self.send( bytearray([0x12, 0x51, 0x78, 0xa3, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff]) ) self.send( bytearray([0x12, 0x51, 0x78, 0xa3, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff]) )
def use_energy_control(self, enable: bool): def apply_energy(self):
''' Whether enable energy control (with set_energy) or not ''' Apply previously set energy to printer
Note: I remember I can't disable it, when I (incorrectly)
thought it was "image/text mode"
''' '''
self.send( self.make_command(0xbe, int_to_bytes(0x01 if enable else 0x00)) ) self.send( self.make_command(0xbe, int_to_bytes(0x01)) )
def get_device_state(self): def get_device_state(self):
'(unknown). seems it could refresh device state & apply config' '(unknown). seems it could refresh device state & apply config'

View File

@ -188,6 +188,7 @@ class PrinterServerHandler(BaseHTTPRequestHandler):
self.printer.fake = self.settings.fake self.printer.fake = self.settings.fake
self.printer.dump = self.settings.dump self.printer.dump = self.settings.dump
self.printer.energy = self.settings.energy self.printer.energy = self.settings.energy
self.printer.quality = self.settings.quality
self.printer.flip_h = self.settings.flip_h or self.settings.flip self.printer.flip_h = self.settings.flip_h or self.settings.flip
self.printer.flip_v = self.settings.flip_v or self.settings.flip self.printer.flip_v = self.settings.flip_v or self.settings.flip
self.printer.rtl = self.settings.force_rtl self.printer.rtl = self.settings.force_rtl

View File

@ -1 +1 @@
0.5.0 0.5.1

View File

@ -17,19 +17,25 @@
<a target="_blank" href="https://github.com/NaitLee/Cat-Printer">GitHub</a> <a target="_blank" href="https://github.com/NaitLee/Cat-Printer">GitHub</a>
</p> </p>
<h2 data-i18n="contributors">Contributors</h2> <h2 data-i18n="contributors">Contributors</h2>
<div class="contributors">
<dl> <dl>
<dt> <dt>
<a target="_blank" href="https://github.com/NaitLee">NaitLee</a> <a target="_blank" href="https://github.com/NaitLee">NaitLee</a>
</dt> </dt>
<dd data-i18n="developer">Developer</dd> <dd data-i18n="developer">Developer</dd>
</dl>
<dl>
<dt> <dt>
<a target="_blank" href="https://github.com/frankenstein91">frankenstein91</a> <a target="_blank" href="https://github.com/frankenstein91">frankenstein91</a>
</dt> </dt>
<dd data-i18n="developer">Developer</dd> <dd data-i18n="developer">Developer</dd>
<dd data-i18n="translator">Translator</dd> <dd data-i18n="translator">Translator</dd>
</dl>
<dl>
<dt data-i18n="all-testers-and-users">All testers & users</dt> <dt data-i18n="all-testers-and-users">All testers & users</dt>
<dd data-i18n="everyone-is-awesome">Everyone is awesome!</dd> <dd data-i18n="everyone-is-awesome">Everyone is awesome!</dd>
</dl> </dl>
</div>
<h2 data-i18n="copyright-and-license">Copyright</h2> <h2 data-i18n="copyright-and-license">Copyright</h2>
<p> <p>
<span>Copyright &copy; 2021-2022 NaitLee Soft.</span> <span>Copyright &copy; 2021-2022 NaitLee Soft.</span>

View File

@ -20,7 +20,9 @@
</select> </select>
<button id="device-refresh" data-i18n="refresh" data-key>Refresh</button> <button id="device-refresh" data-i18n="refresh" data-key>Refresh</button>
<hr /> <hr />
<label data-i18n="process-as-">Process as:</label> <dl>
<dt><label data-i18n="process-as-">Process as:</label></dt>
<dd>
<label> <label>
<input type="radio" name="algo" value="algo-direct" data-key /> <input type="radio" name="algo" value="algo-direct" data-key />
<span data-i18n="text">Text</span> <span data-i18n="text">Text</span>
@ -29,18 +31,27 @@
<input type="radio" name="algo" value="algo-steinberg" data-key checked /> <input type="radio" name="algo" value="algo-steinberg" data-key checked />
<span data-i18n="picture">Picture</span> <span data-i18n="picture">Picture</span>
</label> </label>
</dd>
<!-- <label> <!-- <label>
<input type="radio" name="algo" value="algo-halftone" data-key /> <input type="radio" name="algo" value="algo-halftone" data-key />
<span data-i18n="pattern">Pattern</span> <span data-i18n="pattern">Pattern</span>
</label> --><br /> </label> -->
</dl>
<!-- "brightness" is historically "threshold" --> <!-- "brightness" is historically "threshold" -->
<label for="threshold" data-i18n="brightness-">Brightness:</label> <dl>
<input type="range" min="0" max="256" value="86" step="16" id="threshold" data-key data-default /> <dt><label for="threshold" data-i18n="brightness-">Brightness:</label></dt>
<br /> <dd><input type="range" min="0" max="256" value="86" step="16" id="threshold" data-key data-default /></dd>
</dl>
<!-- "Strength", so-called "darkness", or internally "energy" --> <!-- "Strength", so-called "darkness", or internally "energy" -->
<label for="energy" data-i18n="strength-">Strength:</label> <dl>
<input type="range" min="0" max="256" value="64" step="16" id="energy" data-key data-default /> <dt><label for="energy" data-i18n="strength-">Strength:</label></dt>
<br /> <dd><input type="range" min="0" max="256" value="64" step="16" id="energy" data-key data-default /></dd>
</dl>
<!-- "Quality", just speed of paper feeding, but slower makes better heating -->
<dl>
<dt><label for="quality" data-i18n="quality-">Quality:</label></dt>
<dd><input type="range" min="24" max="36" value="32" step="4" id="quality" data-key data-default /></dd>
</dl>
<input type="checkbox" name="transparent-as-white" id="transparent-as-white" data-key checked /> <input type="checkbox" name="transparent-as-white" id="transparent-as-white" data-key checked />
<label for="transparent-as-white" data-i18n="transparent-as-white">Transparent as White</label> <label for="transparent-as-white" data-i18n="transparent-as-white">Transparent as White</label>
</div> </div>

View File

@ -124,5 +124,7 @@
"strength-": "Strength:", "strength-": "Strength:",
"or-drag-file-to-below": "Or drag file to below", "or-drag-file-to-below": "Or drag file to below",
"reset": "Reset", "reset": "Reset",
"cat-face-toward": "Cat Face Toward" "cat-face-toward": "Cat Face Toward",
"quality-": "Quality:",
"print-quality": "Print quality"
} }

View File

@ -119,5 +119,7 @@
"strength-": "力度:", "strength-": "力度:",
"or-drag-file-to-below": "或拖拽文件至下方", "or-drag-file-to-below": "或拖拽文件至下方",
"reset": "重置", "reset": "重置",
"cat-face-toward": "猫脸朝上" "cat-face-toward": "猫脸朝上",
"quality-": "质量:",
"print-quality": "打印质量"
} }

View File

@ -227,7 +227,7 @@ p {
height: calc(var(--panel-height) - var(--compact-menu-height)); height: calc(var(--panel-height) - var(--compact-menu-height));
padding: var(--span-double) var(--span); padding: var(--span-double) var(--span);
box-sizing: border-box; box-sizing: border-box;
/* overflow-y: scroll; */ overflow-y: scroll;
} }
.panel.sub.active { .panel.sub.active {
height: calc(var(--panel-height) / 2); height: calc(var(--panel-height) / 2);
@ -284,8 +284,14 @@ dl {
margin: var(--span) 0; margin: var(--span) 0;
display: block; display: block;
} }
dd { display: inline; } dt { display: inline-block; min-width: 6em; text-align: end; }
dd+dd { margin-left: var(--font-size); } dd { display: inline-block; margin: 0 calc(var(--font-size) / 4); }
.contributors dt {
min-width: 12em;
text-align: center;
padding: 0 calc(var(--font-size) / 4);
border-right: var(--border) solid var(--fore-color);
}
hr { hr {
border: none; border: none;
border-top: var(--border) solid var(--fore-color); border-top: var(--border) solid var(--fore-color);

View File

@ -326,7 +326,7 @@ class CanvasController {
this.algorithm = name; this.algorithm = name;
this.threshold = CanvasController.defaultThreshold; this.threshold = CanvasController.defaultThreshold;
this._thresholdRange.dispatchEvent(new Event('change')); this._thresholdRange.dispatchEvent(new Event('change'));
this.energy = name == 'algo-direct' ? 72 : 48; this.energy = name == 'algo-direct' ? 96 : 64;
this._energyRange.dispatchEvent(new Event('change')); this._energyRange.dispatchEvent(new Event('change'));
this.activatePreview(); this.activatePreview();
} }
@ -590,6 +590,7 @@ class Main {
); );
this.attachSetter('#threshold', 'change', 'threshold'); this.attachSetter('#threshold', 'change', 'threshold');
this.attachSetter('#energy', 'change', 'energy'); this.attachSetter('#energy', 'change', 'energy');
this.attachSetter('#quality', 'change', 'quality');
this.attachSetter('#flip', 'change', 'flip'); this.attachSetter('#flip', 'change', 'flip');
// this.attachSetter('#flip-h', 'change', 'flip_h'); // this.attachSetter('#flip-h', 'change', 'flip_h');
// this.attachSetter('#flip-v', 'change', 'flip_v'); // this.attachSetter('#flip-v', 'change', 'flip_v');