def main():
    startIdx = int(sys.argv[1]) if len(sys.argv)>1 else 0
    global conn
    with sqlite3.connect('belkin.sqlite3') as conn:
        csr=conn.cursor()
        rows=csr.execute("SELECT id,download_url,page_url,file_sha1"
                " FROM TFiles LIMIT -1 OFFSET %d"%startIdx).fetchall()
        for idx, row in enumerate(rows,startIdx):
            devId,url,page_url,fileSha1=row
            if fileSha1 or not url:
                continue
            uprint('idx=%s, url=%s'%(idx,url))
            url = safeUrl(url)
            uprint('url='+url)
            fname=urlFileName(url)
            uprint('download "%s"'%(fname))
            fname = path.join(dlDir, fname)
            try:
                downloadFile(url, fname)
            except urllib.error.HTTPError:
                print(ex)
                continue
            except OSError as ex:
                if ex.errno == 28:
                    print(ex);print('[Errno 28] No space left on device')
                    break
            except Exception as ex:
                ipdb.set_trace()
                traceback.print_exc()
                continue

            fileSha1=getFileSha1(fname)
            fileSize=path.getsize(fname)
            print('sha1="%s" for "%s"'%(fileSha1,fname))
            csr.execute("UPDATE TFiles SET file_sha1=:fileSha1,"
                    " file_size=:fileSize WHERE id=:devId", locals())
            conn.commit()
            uprint('UPDATE fileSha1=%(fileSha1)s, fileSize=%(fileSize)s'
                    ' WHERE id="%(devId)s"' %locals())
            with ftputil.FTPHost(ftpHostName,ftpUserName,ftpPassword) as ftp:
                ftp.upload(fname, path.basename(fname))
                uprint('uploaded "%s" to ftp://%s/'
                    %(path.basename(fname), ftpHostName))
            os.remove(fname)
def main():
    startIdx = int(sys.argv[1]) if len(sys.argv) > 1 else 0
    global conn
    with sqlite3.connect("Linksys.sqlite3") as conn:
        csr = conn.cursor()
        rows = csr.execute(
            "SELECT brand,model,revision,file_title,href,file_sha1 FROM TFiles " "LIMIT -1 OFFSET %d" % startIdx
        ).fetchall()
        for idx, row in enumerate(rows, startIdx):
            brand, model, revision, fileTitle, url, fileSha1 = row
            print("idx= %d, fileSha1=%s" % (idx, fileSha1))
            if fileSha1:
                uprint('"%s" already downloaded, bypass!' % fileTitle)
                continue
            if not url:
                continue
            fname = urlFileName(url)
            if not fname:
                fname = safeFileName(fileTitle)
            uprint("url=" + url)
            uprint('download "%s" as "%s"' % (fileTitle, fname))
            fname = path.join(dlDir, fname)
            try:
                downloadFile(url, fname)
            except urllib.error.HTTPError:
                print(ex)
                continue
            except OSError as ex:
                if ex.errno == 28:
                    print(ex)
                    print("[Errno 28] No space left on device")
                    break
            except Exception as ex:
                import pdb

                pdb.set_trace()
                import traceback

                traceback.print_exc()
                print(ex)
                continue

            fileSha1 = getFileSha1(fname)
            fileSize = path.getsize(fname)
            print('sha1="%s" for "%s"' % (fileSha1, fname))
            csr.execute(
                "UPDATE TFiles SET file_sha1=:fileSha1, file_size=:fileSize"
                " WHERE brand=:brand AND model=:model AND revision=:revision"
                " AND file_title=:fileTitle",
                locals(),
            )
            conn.commit()
            print(
                "UPDATE fileSha1=%(fileSha1)s, fileSize=%(fileSize)d"
                ' WHERE "%(brand)s", "%(model)s", "%(revision)s", '
                '"%(fileTitle)s" ' % locals()
            )
            with ftputil.FTPHost(ftpHostName, ftpUserName, ftpPassword) as ftp:
                ftp.upload(fname, path.basename(fname))
                print('uploaded "%s" to ftp://%s/' % (path.basename(fname), ftpHostName))
            os.remove(fname)