diff options
Diffstat (limited to 'src/simple-scan.vala')
-rw-r--r-- | src/simple-scan.vala | 294 |
1 files changed, 293 insertions, 1 deletions
diff --git a/src/simple-scan.vala b/src/simple-scan.vala index 771dc82..3f495e5 100644 --- a/src/simple-scan.vala +++ b/src/simple-scan.vala @@ -54,6 +54,7 @@ public class SimpleScan : Gtk.Application book = app.book; app.start_scan.connect (scan_cb); app.stop_scan.connect (cancel_cb); + app.redetect.connect (redetect_cb); scanner = Scanner.get_instance (); scanner.update_devices.connect (update_scan_devices_cb); @@ -542,6 +543,217 @@ public class SimpleScan : Gtk.Application 0x04f960a9, /* ADS-1600W */ }; + /* Taken from backend/pixma/pixma_mp150.c pixma_mp730.c pixma_mp750.c pixma_mp800.c in the pixma SANE backend repository */ + /* Canon Pixma IDs extracted using the following Python script + import sys + for f in sys.argv: + for l in open(f, "r").readlines(): + tokens=l.split () + if len (tokens) >= 3 and tokens[0].startswith("#define") and tokens[1].endswith("_PID") and tokens[2].startswith("0x") and not tokens[2].endswith("ffff"): + print ( "0x04a9" + tokens[2][2:] + ", /* " + tokens[1][:-4] + " * /") + */ + private const uint32 pixma_devices[] = { + 0x04a91709, /* MP150 */ + 0x04a9170a, /* MP170 */ + 0x04a9170b, /* MP450 */ + 0x04a9170c, /* MP500 */ + 0x04a91712, /* MP530 */ + 0x04a91714, /* MP160 */ + 0x04a91715, /* MP180 */ + 0x04a91716, /* MP460 */ + 0x04a91717, /* MP510 */ + 0x04a91718, /* MP600 */ + 0x04a91719, /* MP600R */ + 0x04a9172b, /* MP140 */ + 0x04a9171c, /* MX7600 */ + 0x04a91721, /* MP210 */ + 0x04a91722, /* MP220 */ + 0x04a91723, /* MP470 */ + 0x04a91724, /* MP520 */ + 0x04a91725, /* MP610 */ + 0x04a91727, /* MX300 */ + 0x04a91728, /* MX310 */ + 0x04a91729, /* MX700 */ + 0x04a9172c, /* MX850 */ + 0x04a9172e, /* MP630 */ + 0x04a9172f, /* MP620 */ + 0x04a91730, /* MP540 */ + 0x04a91731, /* MP480 */ + 0x04a91732, /* MP240 */ + 0x04a91733, /* MP260 */ + 0x04a91734, /* MP190 */ + 0x04a91735, /* MX860 */ + 0x04a91736, /* MX320 */ + 0x04a91737, /* MX330 */ + 0x04a9173a, /* MP250 */ + 0x04a9173b, /* MP270 */ + 0x04a9173c, /* MP490 */ + 0x04a9173d, /* MP550 */ + 0x04a9173e, /* MP560 */ + 0x04a9173f, /* MP640 */ + 0x04a91741, /* MX340 */ + 0x04a91742, /* MX350 */ + 0x04a91743, /* MX870 */ + 0x04a91746, /* MP280 */ + 0x04a91747, /* MP495 */ + 0x04a91748, /* MG5100 */ + 0x04a91749, /* MG5200 */ + 0x04a9174a, /* MG6100 */ + 0x04a9174d, /* MX360 */ + 0x04a9174e, /* MX410 */ + 0x04a9174f, /* MX420 */ + 0x04a91750, /* MX880 */ + 0x04a91751, /* MG2100 */ + 0x04a91752, /* MG3100 */ + 0x04a91753, /* MG4100 */ + 0x04a91754, /* MG5300 */ + 0x04a91755, /* MG6200 */ + 0x04a91757, /* MP493 */ + 0x04a91758, /* E500 */ + 0x04a91759, /* MX370 */ + 0x04a9175B, /* MX430 */ + 0x04a9175C, /* MX510 */ + 0x04a9175D, /* MX710 */ + 0x04a9175E, /* MX890 */ + 0x04a9175A, /* E600 */ + 0x04a91763, /* MG4200 */ + 0x04a9175F, /* MP230 */ + 0x04a91765, /* MG6300 */ + 0x04a91760, /* MG2200 */ + 0x04a91761, /* E510 */ + 0x04a91762, /* MG3200 */ + 0x04a91764, /* MG5400 */ + 0x04a91766, /* MX390 */ + 0x04a91767, /* E610 */ + 0x04a91768, /* MX450 */ + 0x04a91769, /* MX520 */ + 0x04a9176a, /* MX720 */ + 0x04a9176b, /* MX920 */ + 0x04a9176c, /* MG2400 */ + 0x04a9176d, /* MG2500 */ + 0x04a9176e, /* MG3500 */ + 0x04a9176f, /* MG6500 */ + 0x04a91770, /* MG6400 */ + 0x04a91771, /* MG5500 */ + 0x04a91772, /* MG7100 */ + 0x04a91774, /* MX470 */ + 0x04a91775, /* MX530 */ + 0x04a91776, /* MB5000 */ + 0x04a91777, /* MB5300 */ + 0x04a91778, /* MB2000 */ + 0x04a91779, /* MB2300 */ + 0x04a9177a, /* E400 */ + 0x04a9177b, /* E560 */ + 0x04a9177c, /* MG7500 */ + 0x04a9177e, /* MG6600 */ + 0x04a9177f, /* MG5600 */ + 0x04a91780, /* MG2900 */ + 0x04a91788, /* E460 */ + 0x04a91787, /* MX490 */ + 0x04a91789, /* E480 */ + 0x04a9178a, /* MG3600 */ + 0x04a9178b, /* MG7700 */ + 0x04a9178c, /* MG6900 */ + 0x04a9178d, /* MG6800 */ + 0x04a9178e, /* MG5700 */ + 0x04a91792, /* MB2700 */ + 0x04a91793, /* MB2100 */ + 0x04a91794, /* G3000 */ + 0x04a91795, /* G2000 */ + 0x04a9179f, /* TS9000 */ + 0x04a91800, /* TS8000 */ + 0x04a91801, /* TS6000 */ + 0x04a91802, /* TS5000 */ + 0x04a9180b, /* MG3000 */ + 0x04a9180c, /* E470 */ + 0x04a9181e, /* E410 */ + 0x04a9181d, /* G4000 */ + 0x04a91822, /* TS6100 */ + 0x04a91825, /* TS5100 */ + 0x04a91827, /* TS3100 */ + 0x04a91828, /* E3100 */ + 0x04a9178f, /* MB5400 */ + 0x04a91790, /* MB5100 */ + 0x04a91820, /* TS9100 */ + 0x04a91823, /* TR8500 */ + 0x04a91824, /* TR7500 */ + 0x04a9185c, /* TS9500 */ + 0x04a91912, /* LIDE400 */ + 0x04a91913, /* LIDE300 */ + 0x04a91821, /* TS8100 */ + 0x04a9183a, /* G2010 */ + 0x04a9183b, /* G3010 */ + 0x04a9183d, /* G4010 */ + 0x04a9183e, /* TS9180 */ + 0x04a9183f, /* TS8180 */ + 0x04a91840, /* TS6180 */ + 0x04a91841, /* TR8580 */ + 0x04a91842, /* TS8130 */ + 0x04a91843, /* TS6130 */ + 0x04a91844, /* TR8530 */ + 0x04a91845, /* TR7530 */ + 0x04a91846, /* XK50 */ + 0x04a91847, /* XK70 */ + 0x04a91854, /* TR4500 */ + 0x04a91855, /* E4200 */ + 0x04a91856, /* TS6200 */ + 0x04a91857, /* TS6280 */ + 0x04a91858, /* TS6230 */ + 0x04a91859, /* TS8200 */ + 0x04a9185a, /* TS8280 */ + 0x04a9185b, /* TS8230 */ + 0x04a9185d, /* TS9580 */ + 0x04a9185e, /* TR9530 */ + 0x04a91863, /* G7000 */ + 0x04a91865, /* G6000 */ + 0x04a91866, /* G6080 */ + 0x04a91869, /* GM4000 */ + 0x04a91873, /* XK80 */ + 0x04a9188b, /* TS5300 */ + 0x04a9188c, /* TS5380 */ + 0x04a9188d, /* TS6300 */ + 0x04a9188e, /* TS6380 */ + 0x04a9188f, /* TS7330 */ + 0x04a91890, /* TS8300 */ + 0x04a91891, /* TS8380 */ + 0x04a91892, /* TS8330 */ + 0x04a91893, /* XK60 */ + 0x04a91894, /* TS6330 */ + 0x04a918a2, /* TS3300 */ + 0x04a918a3, /* E3300 */ + 0x04a9261f, /* MP10 */ + 0x04a9262f, /* MP730 */ + 0x04a92630, /* MP700 */ + 0x04a92635, /* MP5 */ + 0x04a9263c, /* MP360 */ + 0x04a9263d, /* MP370 */ + 0x04a9263e, /* MP390 */ + 0x04a9263f, /* MP375R */ + 0x04a9264c, /* MP740 */ + 0x04a9264d, /* MP710 */ + 0x04a9265d, /* MF5730 */ + 0x04a9265e, /* MF5750 */ + 0x04a9265f, /* MF5770 */ + 0x04a92660, /* MF3110 */ + 0x04a926e6, /* IR1020 */ + 0x04a91706, /* MP750 */ + 0x04a91708, /* MP760 */ + 0x04a91707, /* MP780 */ + 0x04a9170d, /* MP800 */ + 0x04a9170e, /* MP800R */ + 0x04a91713, /* MP830 */ + 0x04a9171a, /* MP810 */ + 0x04a9171b, /* MP960 */ + 0x04a91726, /* MP970 */ + 0x04a91901, /* CS8800F */ + 0x04a9172d, /* MP980 */ + 0x04a91740, /* MP990 */ + 0x04a91908, /* CS9000F */ + 0x04a9174b, /* MG8100 */ + 0x04a91756, /* MG8200 */ + 0x04a9190d, /* CS9000F_MII */ + }; + /* Taken from uld/noarch/oem.conf in the Samsung SANE driver */ private const uint32 samsung_devices[] = { 0x04e83425, 0x04e8341c, 0x04e8342a, 0x04e8343d, 0x04e83456, 0x04e8345a, 0x04e83427, 0x04e8343a, 0x04e83428, 0x04e8343b, 0x04e83455, 0x04e83421, 0x04e83439, 0x04e83444, 0x04e8343f, 0x04e8344e, 0x04e83431, 0x04e8345c, 0x04e8344d, 0x04e83462, 0x04e83464, 0x04e83461, 0x04e83460, 0x04e8340e, 0x04e83435, 0x04e8340f, 0x04e83441, 0x04e8344f, 0x04e83413, 0x04e8341b, 0x04e8342e, 0x04e83426, 0x04e8342b, 0x04e83433, 0x04e83440, 0x04e83434, 0x04e8345b, 0x04e83457, 0x04e8341f, 0x04e83453, 0x04e8344b, 0x04e83409, 0x04e83412, 0x04e83419, 0x04e8342c, 0x04e8343c, 0x04e83432, 0x04e8342d, 0x04e83430, 0x04e8342f, @@ -549,6 +761,10 @@ public class SimpleScan : Gtk.Application 0x04e8347c, 0x04e8347e, 0x04e83481, 0x04e83482, 0x04e83331, 0x04e83332, 0x04e83483, 0x04e83484, 0x04e83485, 0x04e83478, 0x04e83325, 0x04e83327, 0x04e8346f, 0x04e83477, 0x04e83324, 0x04e83326, 0x04e83486, 0x04e83487, 0x04e83489 }; + /* Taken from uld/noarch/oem.conf in the HP/Samsung SANE driver + These devices are rebranded Samsung Multifunction Printers. */ + private const uint32 smfp_devices[] = { 0x03F0AA2A, 0x03F0CE2A, 0x03F0C02A, 0x03F0EB2A, 0x03F0F22A }; + /* Taken from /usr/share/hplip/data/models/models.dat in the HPAIO driver */ private const uint32 hpaio_devices[] = { 0x04f92311, /* HP Officejet d125xi All-in-One Printer */ @@ -1236,6 +1452,68 @@ public class SimpleScan : Gtk.Application /* Taken from epkowa.desc from iscan-data package for Epson driver */ private const uint32 epkowa_devices[] = { 0x04b80101, 0x04b80102, 0x04b80103, 0x04b80104, 0x04b80105, 0x04b80106, 0x04b80107, 0x04b80108, 0x04b80109, 0x04b8010a, 0x04b8010b, 0x04b8010c, 0x04b8010d, 0x04b8010e, 0x04b8010f, 0x04b80110, 0x04b80112, 0x04b80114, 0x04b80116, 0x04b80118, 0x04b80119, 0x04b8011a, 0x04b8011b, 0x04b8011c, 0x04b8011d, 0x04b8011e, 0x04b8011f, 0x04b80120, 0x04b80121, 0x04b80122, 0x04b80126, 0x04b80128, 0x04b80129, 0x04b8012a, 0x04b8012b, 0x04b8012c, 0x04b8012d, 0x04b8012e, 0x04b8012f, 0x04b80130, 0x04b80131, 0x04b80133, 0x04b80135, 0x04b80136, 0x04b80137, 0x04b80138, 0x04b8013a, 0x04b8013b, 0x04b8013c, 0x04b8013d, 0x04b80142, 0x04b80143, 0x04b80144, 0x04b80147, 0x04b8014a, 0x04b8014b, 0x04b80151, 0x04b80153, 0x04b80801, 0x04b80802, 0x04b80805, 0x04b80806, 0x04b80807, 0x04b80808, 0x04b8080a, 0x04b8080c, 0x04b8080d, 0x04b8080e, 0x04b8080f, 0x04b80810, 0x04b80811, 0x04b80813, 0x04b80814, 0x04b80815, 0x04b80817, 0x04b80818, 0x04b80819, 0x04b8081a, 0x04b8081c, 0x04b8081d, 0x04b8081f, 0x04b80820, 0x04b80821, 0x04b80827, 0x04b80828, 0x04b80829, 0x04b8082a, 0x04b8082b, 0x04b8082e, 0x04b8082f, 0x04b80830, 0x04b80831, 0x04b80833, 0x04b80834, 0x04b80835, 0x04b80836, 0x04b80837, 0x04b80838, 0x04b80839, 0x04b8083a, 0x04b8083c, 0x04b8083f, 0x04b80841, 0x04b80843, 0x04b80844, 0x04b80846, 0x04b80847, 0x04b80848, 0x04b80849, 0x04b8084a, 0x04b8084c, 0x04b8084d, 0x04b8084f, 0x04b80850, 0x04b80851, 0x04b80852, 0x04b80853, 0x04b80854, 0x04b80855, 0x04b80856, 0x04b8085c, 0x04b8085d, 0x04b8085e, 0x04b8085f, 0x04b80860, 0x04b80861, 0x04b80862, 0x04b80863, 0x04b80864, 0x04b80865, 0x04b80866, 0x04b80869, 0x04b8086a, 0x04b80870, 0x04b80871, 0x04b80872, 0x04b80873, 0x04b80878, 0x04b80879, 0x04b8087b, 0x04b8087c, 0x04b8087d, 0x04b8087e, 0x04b8087f, 0x04b80880, 0x04b80881, 0x04b80883, 0x04b80884, 0x04b80885, 0x04b8088f, 0x04b80890, 0x04b80891, 0x04b80892, 0x04b80893, 0x04b80894, 0x04b80895, 0x04b80896, 0x04b80897, 0x04b80898, 0x04b80899, 0x04b8089a, 0x04b8089b, 0x04b8089c, 0x04b8089d, 0x04b8089e, 0x04b8089f, 0x04b808a0, 0x04b808a1, 0x04b808a5, 0x04b808a6, 0x04b808a8, 0x04b808a9, 0x04b808aa, 0x04b808ab, 0x04b808ac, 0x04b808ad, 0x04b808ae, 0x04b808af, 0x04b808b0, 0x04b808b3, 0x04b808b4, 0x04b808b5, 0x04b808b6, 0x04b808b7, 0x04b808b8, 0x04b808b9, 0x04b808bd, 0x04b808be, 0x04b808bf, 0x04b808c0, 0x04b808c1, 0x04b808c3, 0x04b808c4, 0x04b808c5, 0x04b808c6, 0x04b808c7, 0x04b808c8, 0x04b808c9, 0x04b808ca, 0x04b808cd, 0x04b808d0 }; + + /* Taken from /usr/local/lexmark/unix_scan_drivers/etc/lexmark_nscan.conf */ + /* Lexmark IDs extracted using command: + * grep -r "usb .* /usr" --no-filename --only-matching | sed 's/usb //' | sed 's/ 0x//' | sed 's/ \/usr/,/' + */ + private const uint32 lexmark_nscan_devices[] = { + 0x043d0279, + 0x043d027a, + 0x043d01D6, + 0x043d01D7, + 0x043d01D8, + 0x043d01DC, + 0x043d01DE, + 0x043d01E0, + 0x043d01FA, + 0x043d01FB, + 0x043d01FC, + 0x043d01FD, + 0x043d01FE, + 0x043d01FF, + 0x043d01F4, + 0x043d0120, + 0x043d0121, + 0x043d0128, + 0x043d014F, + 0x043d0149, + 0x043d0152, + 0x043d0168, + 0x043d0169, + 0x043d016A, + 0x043d012D, + 0x043d01C4, + 0x043d01C5, + 0x043d01C6, + 0x043d01CF, + 0x043d01D0, + 0x043d01D1, + 0x043d01DB, + 0x043d01ED, + 0x043d01F1, + 0x043d01F5, + 0x043d0222, + 0x043d0223, + 0x043d0227, + 0x043d0228, + 0x043d022A, + 0x043d022B, + 0x043d022F, + 0x043d0230, + 0x043d0231, + 0x043d0234, + 0x043d0235, + 0x043d0244, + 0x043d0245, + 0x043d0246, + 0x043d0247, + 0x043d0248, + 0x043d024A, + 0x043d024E, + 0x043d024F + }; + /* Brother IDs extracted using the following Python * * import sys @@ -1273,9 +1551,12 @@ public class SimpleScan : Gtk.Application add_devices (driver_map, brscan2_devices, "brscan2"); add_devices (driver_map, brscan3_devices, "brscan3"); add_devices (driver_map, brscan4_devices, "brscan4"); + add_devices (driver_map, pixma_devices, "pixma"); add_devices (driver_map, samsung_devices, "samsung"); + add_devices (driver_map, smfp_devices, "smfp"); add_devices (driver_map, hpaio_devices, "hpaio"); add_devices (driver_map, epkowa_devices, "epkowa"); + add_devices (driver_map, lexmark_nscan_devices, "lexmark_nscan"); var devices = usb_context.get_devices (); for (var i = 0; i < devices.length; i++) { @@ -1547,6 +1828,12 @@ public class SimpleScan : Gtk.Application scanner.cancel (); } + private void redetect_cb (AppWindow ui) + { + scanner.redetect (); + } + + private static void log_cb (string? log_domain, LogLevelFlags log_level, string message) { string prefix; @@ -1695,7 +1982,7 @@ public class SimpleScan : Gtk.Application } catch (Error e) { - stderr.printf ("Error fixing PDF file: %s", e.message); + stderr.printf ("Error fixing PDF file: %s\n", e.message); return Posix.EXIT_FAILURE; } return Posix.EXIT_SUCCESS; @@ -1715,6 +2002,11 @@ public class SimpleScan : Gtk.Application DirUtils.create_with_parents (path, 0700); path = Path.build_filename (Environment.get_user_cache_dir (), "simple-scan", "simple-scan.log", null); log_file = FileStream.open (path, "w"); + if (log_file == null ) + { + stderr.printf ("Error: Unable to open %s file for writing\n", path); + return Posix.EXIT_FAILURE; + } Log.set_default_handler (log_cb); debug ("Starting %s %s, PID=%i", args[0], VERSION, Posix.getpid ()); |