<div dir="ltr"><div>Hi Ralf,</div><div>I have now hidden the implementation details of DataUpdater class on your suggestion using a unique_ptr. <br></div><div>How should we proceed on the server side?</div><div>I think you would have to create a directory in files area where the updated databases would be hosted. I could then update the URL in the code.<br> </div><div><br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><div><p>As bankdata_dir() points to a read only location (by default
      /usr/share/ktoblzcheck/ on unix like os), there is some work
      required to provide a writeable location, where the updater can
      save the download files and ktoblzcheck can read downloaded
      bankdata files. The rule is to search the writeable location first
      and then, if no file has been found, the readonly location. <br>
    </p>
    <p>The writeable location would be on unix like os:
      /home/xxx/.local/share and on windows: C:\users\xxx\.local\share
      where C:\users\xxx can be retrieved from the USERPROFILE
      environment variable.</p></div></blockquote><div>Yes, that sounds good, <br></div><div>But in the <b>current </b>code, the dated_file list is populated from the bankdata_dir() first and if no files are found then it checks for BANKDATA_PATH. <br></div><div>Is there any reson for this?</div><div><br></div><div>Thanks.</div><div>Prasun<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 7 Sep 2020 at 03:54, Ralf Habacker <<a href="mailto:ralf.habacker@freenet.de">ralf.habacker@freenet.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <div>Am 27.08.20 um 14:53 schrieb Prasun
      Kumar:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>Hi Ralf,</div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>A static function in the class
            AccountNumberCheck::updateDatabase(),<br>
            which  updates the database when called by the client and
            returns the <br>
            state of operation e.g<br>
            <br>
              bool AccountNumberCheck::updateDatabase()</div>
        </blockquote>
        <div> </div>
        <div>As suggested here: <a href="https://mail.kde.org/pipermail/kde-finance-apps/2020-May/000835.html" target="_blank">https://mail.kde.org/pipermail/kde-finance-apps/2020-May/000835.html</a></div>
        <div>I have added an API to update databases as a class,
          'DataUpdater'. I have created a separate class for this</div>
        <div>as the downloading code is too big to put in one method
          considering modularity and also since these methods were</div>
        <div>independent of the AccountNumberCheck class. The only
          required method I see now is the bankdata_dir() for downloaded</div>
        <div>file installation but since it's a static method, it can be
          accessed without any AccountNumberCheck object.</div>
      </div>
    </blockquote>
    <p>As bankdata_dir() points to a read only location (by default
      /usr/share/ktoblzcheck/ on unix like os), there is some work
      required to provide a writeable location, where the updater can
      save the download files and ktoblzcheck can read downloaded
      bankdata files. The rule is to search the writeable location first
      and then, if no file has been found, the readonly location. <br>
    </p>
    <p>The writeable location would be on unix like os:
      /home/xxx/.local/share and on windows: C:\users\xxx\.local\share
      where C:\users\xxx can be retrieved from the USERPROFILE
      environment variable.<br>
    </p>
    <blockquote type="cite">
      <div dir="ltr">
        <div>Also, since the class is in the same header file, a client
          doesn't need to import extra headers, however, they would
          surely</div>
        <div>need to create a DataUpdater object.<br>
        </div>
      </div>
    </blockquote>
    This looks good except the fact, that there are implementation
    details in the public header, which would better to placed into a
    private class following the hints mentioned at
    <a href="https://herbsutter.com/gotw/_100/" target="_blank">https://herbsutter.com/gotw/_100/</a>.<br>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
      </div>
    </blockquote>
    <p>Regards</p>
    <p>Ralf</p>
    <blockquote type="cite">
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Thu, 27 Aug 2020 at 12:29,
          Ralf Habacker <<a href="mailto:ralf.habacker@freenet.de" target="_blank">ralf.habacker@freenet.de</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Am
          18.08.20 um 06:54 schrieb Prasun Kumar:<br>
          > Hi mentors,<br>
          > I have incorporated most of your suggestions into the
          project and I am <br>
          > working on the few left.<br>
          > <br>
          > The remaining milestones in the proposed project are the
          creation of API <br>
          > to integrate the<br>
          > databases into other applications and the additional
          subtask of a <br>
          > download API to fetch<br>
          > updated databases from a server.<br>
          > <br>
          > The downloading API's flow is somewhat clear to me but it
          would be <br>
          > helpful to have some pointers<br>
          > for the first API.<br>
          > <br>
          <br>
          A static function in the class
          AccountNumberCheck::updateDatabase(),<br>
          which  updates the database when called by the client and
          returns the <br>
          state of operation e.g<br>
          <br>
            bool AccountNumberCheck::updateDatabase()<br>
          <br>
          or<br>
          <br>
          typedef enum {} UpdateState;<br>
          <br>
          UpdateState AccountNumberCheck::updateDatabase();<br>
          <br>
          <br>
          Regards<br>
          Ralf<br>
        </blockquote>
      </div>
    </blockquote>
  </div>

</blockquote></div>