IntelliDisk

IntelliDisk
IntelliDisk

Introduction

IntelliDisk is a free (as in “free speech” and also as in “free beer”) distributed storage solution. Running in the Microsoft Windows environment, its use is governed by GNU General Public License v3.0. IntelliDisk is written in C++ and uses pure Win32 API and STL which ensures a higher execution speed and smaller program size. By optimizing as many routines as possible without losing user friendliness, IntelliDisk is trying to reduce the world carbon dioxide emissions. When using less CPU power, the PC can throttle down and reduce power consumption, resulting in a greener environment. I hope you enjoy IntelliDisk as much as I enjoy coding it!

IntelliDisk application allows users to save files across multiple devices, and have them automatically sync on these devices. This means someone can access and work on the same document in multiple locations. IntelliDisk application provides relatively easy access to cloud storage space, allowing options to share content with others. IntelliDisk application is free as in free speech/free beer. It is developed as a client-server architecture, which separates application into two logical and physical computing tiers.

What is client-server application?

A client-server application is a program that runs on the client-side while accessing the information over a remote server. The client-server always makes requests to the remote server by calling functions of the server to retrieve information. The client program and the server program may run on different systems and on different platforms where they require a communications layer known as middleware.

The client-server application might run on a network client or a network server. The applications are solely described on their architecture except for the fact that how it is deployed on the network. It uses a two-tier architecture that has two users; the client and the server.

The server machine acts as a host that can run single or multiple server programs that share their resources with the clients. Sometimes the server gets overloaded when simultaneous requests are received from the client.

The communication between the client and server is a two-way street. Servers can reach the client to make sure that the client has appropriate updates, patches, or if there are any other requirements. Once the inquiry is done, the server closes the connection to the client so that the bandwidth space and the network are conserved.

Features of client-server application

Some of the typical features of client-server applications are as follows:

  • Multiple client programs have the ability to request services from a single server;
  • A single client program can request services from multiple server programs;
  • A single server program has the ability to provide multiple services;
  • The client program doesn’t have to be aware of the number of subprograms that provide a service;
  • Multiple subprograms have the ability to work together to provide a service;
  • The server programs run on a machine that is remote from the machine that runs the client program.

Getting started

Install IntelliDisk using the installer

  • Download the installer
  • Run the executable binary and follow the installation flow

The installer will likely require Administrative privileges in order to install IntelliDisk (and later, to update IntelliDisk or install or update plugins, or anything else that requires writing to the installation directory). If you do not have Administrative privileges, you either need to tell the installer to use a location where you do have write permission (though that may still ask for Administrator privileges), or you may choose not use the installer and instead run a portable edition from a directory where you have write permission.

Install IntelliDisk from zip

These instructions will allow you to run a portable or mini-portable (also called “minimalist”), without requiring administrative privileges.

  • Create a new folder somewhere that you have write-permission
  • Unzip the content into the new folder
  • Run IntelliDisk from the new folder

The portable zip edition of IntelliDisk can be removed by deleting the directory they came in. If you manually set up file associations or context-menu entries in the OS, it is your responsibility to remove them yourself.

Setup of this application

  • Install MySQL ODBC connector;
  • Choose a MySQL hosting service and create the MySQL database;
  • Configure Server instance (create `IntelliDisk.xml` configuration file):
  • IntelliDisk-MySQL
    IntelliDisk-MySQL
    <?xml version="1.0" encoding="UTF-16" standalone="no"?>
    <xml>
        <IntelliDisk>
            <ServicePort>8080</ServicePort>
            <HostName>localhost</HostName>
            <HostPort>3306</HostPort>
            <Database>MySQL_database</Database>
            <Username>MySQL_username</Username>
            <Password>MySQL_password</Password>
        </IntelliDisk>
    </xml>
  • Configure Client instance (change Servers’s IP & Port):
  • IntelliDisk-Settings
    IntelliDisk-Settings

Note: you should check the option "Start IntelliDisk automatically when I sign in to Windows".

Create and Submit your Pull Request

As noted in the Contributing Rules for IntelliDisk, all Pull Requests need to be attached to a issue on GitHub. So the first step is to create an issue which requests that the functionality be improved (if it was already there) or added (if it was not yet there); in your issue, be sure to explain that you have the functionality definition ready, and will be submitting a Pull Request. The second step is to use the GitHub interface to create the Pull Request from your fork into the main repository. The final step is to wait for and respond to feedback from the developers as needed, until such time as your PR is accepted or rejected.

Software Content Register

Release Name: IntelliDisk
Description: IntelliDisk is an alternative Windows version to the famous Microsoft OneDrive!
Outgoing License: GNU General Public License v3.0
Type of content: static/dynamic libraries, source code, binary

IAppSettings
Description: AppSettings is a collection of freeware C++ classes to encapsulate reading and writing application configuration settings. The supported output formats are:
– Per user in the Registry (HKEY_CURRENT_USER\Software\"Company Name"\"Product Name"\"Product Version") via the class CHKCUAppSettings;
– Per machine in the Registry (HKEY_LOCAL_MACHINE\Software\"Company Name"\"Product Name"\"Product Version") via the class CHKLMAppSettings;
– Service parameters in the registry (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\"Service Name"\Parameters) via the class CServicesAppSettings. This means that you can use this class in conjunction with the author's own CNTService class framework in preference to the functions for configuration settings provided by that framework.
– A standard windows ini file via the class CIniAppSettings;
– An XML file via the class CXMLAppSettings. Internally this class uses the MSXML parser to create and parse the XML;
– A JSON file via the class CJSONAppSettings. Internally this class uses the JSON++ library of the author to create and parse the JSON.
Version: 1.26
Home Page: https://www.naughter.com/appsettings.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

base64
Description: base64 encoding and decoding with c++
Version: unspecified
Home Page: https://github.com/ReneNyffenegger/cpp-base64
License: Custom (René Nyffenegger license)
Format: source code, binary

CFileInformation, CNotifyDirCheck
Description: How to get a notification if change occurs in a specified directory.
Version: unspecified
Home Page: https://www.codeproject.com/Articles/4692/How-to-get-a-notification-if-change-occurs-in-a-sp
License: Code Project Open License
Format: source code, binary

genUp4win
Desciption: This library is a generic updater for Windows.
Version: 2.03
Home Page: https://github.com/mihaimoga/genUp4win
License: MIT
Format: source code, binary

CHLinkCtrl
Description: This class allows you to create a static control on a window or dialog which behaves similar to a hyperlink as seen on a web page. When the mouse moves over the text the cursor becomes a hand and when you click on the text the hyperlink is executed.
Version: 1.43
Home Page: https://www.naughter.com/hlinkctrl.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

CInstanceChecker
Description: This class implements single instance apps. Limiting your app to single instance is more tricky in Win32 with the removal of the hPrevInstance parameter from WinMain and the introduction of separate address spaces.
Version: 1.25
Home Page: https://www.naughter.com/sinstance.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

ODBCWrappers
Description: The classes provided are: CODBC::CHandle, CODBC::CEnvironment, CODBC::CConnection, CODBC::CStatement & CODBC::CDescriptor.
CHandle provides a class based encapsulation of a SQLHANDLE handle and the various ODBC v3 APIs which work on any SQLHANDLE type handle.
CEnvironment derives from CHandle and provides encapsulation of a ODBC environment handle. This class allows configuration of ODBC for initial usage and creation of connections to a database.
CConnection derives from CHandle and provides encapsulation of a logical connection to a database.
CStatement derives from CHandle and provides encapsulation of an ODBC "statement" which allows execution of commands against a ODBC connection.
CDescriptor derives from CHandle and provides encapsulation of an ODBC "descriptor".
Version: 1.22
Home Page: https://www.naughter.com/odbcwrappers.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

SHA256
Description: A C++ SHA256 implementation.
Version: unspecified
Home Page: https://github.com/System-Glitch/SHA256
License: MIT License
Format: source code, binary

CTrayNotifyIcon
Description: This class encapsulates the Shell_NotifyIcon SDK call. This API is used to create those nifty little icons such as volume control you see in the tray notification area on Windows.
Version: 1.77
Home Page: https://www.naughter.com/ntray.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

CVersionInfo
Description: This simple little class encapsulates the SDK calls which access version info from Win32 files. Most executables and DLL’s have a VS_VERSION_INFO resource associated with them and this class provides a simple C++ class to programmatically access this information.
Version: 1.13
Home Page: https://www.naughter.com/versioninfo.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

CWSocket
Description: This is a simple C++/MFC encapsulation of an SDK socket. The CWSocket class can be using in other projects to provide a simple encapsulation of a socket.
Version: 1.48
Home Page: https://www.naughter.com/w3mfc.html
License: Custom (PJ Naughter’s license)
Format: source code, binary

René Nyffenegger’s license: This source code is provided ‘as-is’, without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this source code must not be misrepresented; you must not claim that you wrote the original source code. If you use this source code in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original source code.
  3. This notice may not be removed or altered from any source distribution.

PJ Naughter’s license: You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) when your product is released in binary form. You are allowed to modify the source code in any way you want except you cannot modify the copyright details at the top of each module. If you want to distribute source code with your application, then you are only allowed to distribute versions released by the author. This is to maintain a single distribution point for the source code.

History

  • Version 1.01 (July 14th, 2023): Initial release
  • Version 1.02 (August 20th, 2023):
    • Changed article’s download link. Updated the About dialog (email & website).
    • Added social media links: Twitter, LinkedIn, Facebook, and Instagram.
    • Added shortcuts to GitHub repository’s Issues, Discussions, and Wiki.
  • Version 1.03 (November 5th, 2023):
    • Updated PJ Naughter’s CTrayNotifyIcon library to the latest version available. Fixed an issue where the CTrayNotifyIcon::OnTrayNotification callback method would not work correctly if the m_NotifyIconData.uTimeout member variable gets updated during runtime of client applications. This can occur when you call CTrayNotifyIcon::SetBalloonDetails. Thanks to Maisala Tuomo for reporting this bug.
    • Updated PJ Naughter’s AppSettings library to the latest version available. Optimized construction of various std::vector and std::[w]string instances throughout the codebase.
  • Version 1.04 (December 17th, 2023): Updated PJ Naughter’s ODBCWrappers library to the latest version available. Updated module to remove usage of _if_exists by now using ODBCVER and _ATL_MODULES preprocessor macro checks along with SFINAE.
  • Version 1.05 (January 1st, 2024):
    • Switched to Visual Studio Enterprise 2022 (some changes were made in the source code).
    • Added setup project for this solution!
  • Version 1.06 (January 13th, 2024):
    • Added LICENSE to installation folder.
    • Updated Jérémy LAMBERT’s SHA256 library to the latest version available. Make digest() return a std::array – this way, memory management is automatic, and the compiler can more easily detect out-of-bounds reads or writes.
  • Version 1.07 (January 26th, 2024): Added ReleaseNotes.html and SoftwareContentRegister.html to GitHub repo.
  • Version 1.08 (February 21st, 2024): Switched MFC application’ theme back to native Windows.