diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..482daca --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @Mediaportal-Plugin-Team/plugin-developers diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..56fcc54 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +version: 2 + +updates: + - package-ecosystem: "github-actions" + directories: + - "*" + schedule: + interval: weekly + day: monday + time: "12:00" + labels: + - dependencies + commit-message: + prefix: "DEP" + open-pull-requests-limit: 10 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..fa1fda0 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,334 @@ +name: Build / MPSync Plugin + +on: + push: + # On Push to Master branch + branches: + - master + # Ignore all Tags / Release + tags-ignore: + - '**' + + workflow_call: + inputs: + retention-build: + description: "Retention Period for Setup files. Default is 90" + default: 90 + required: false + type: number + outputs: + version: + description: "MPE1 Version" + value: ${{ jobs.mpe.outputs.version }} + +jobs: + build: + name: MPSync Plugin / Build + runs-on: windows-2022 + steps: + - name: Setup Visual Studio 2022 + uses: microsoft/setup-msbuild@v2 + with: + vs-version: 16.11 + + - name: Git Checkout + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Nuget + run: | + nuget restore + working-directory: ${{ github.workspace }}\MPSync + shell: cmd + + - name: Git Checkout / MPE / XPath + uses: actions/checkout@v6 + with: + repository: Mediaportal-Plugin-Team/Mediaportal-Tools + path: Tools + + - name: Build (x86) + run: | + build.cmd x86 < nul + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Build (x64) + run: | + build.cmd x64 < nul + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Upload Artifact / Plugin + uses: actions/upload-artifact@v7 + if: ${{ success() }} + with: + name: MPSync + path: | + ${{ github.workspace }}\MPSync\MPSync\bin\Release\MPSync.dll + retention-days: ${{ inputs.retention-build || 90 }} + if-no-files-found: error + + - name: Save cache + uses: actions/cache/save@v5 + with: + path: ${{ github.workspace }} + key: plugin + + changes: + name: XMP2 / Changed + runs-on: ubuntu-latest + outputs: + changes: ${{ steps.changes.outputs.xmp }} + steps: + - uses: actions/checkout@v6 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + xmp: + - '**.xmp2' + + codeql: + name: CodeQL + if: ${{ needs.changes.outputs.changes == 'true' }} + uses: Mediaportal-Plugin-Team/Mediaportal-Tools/.github/workflows/codeql.yml@master + with: + nuget-restore: true + nuget-path: MPSync + needs: + - build + - changes + permissions: + security-events: write + secrets: inherit + + mpe: + name: MPSync Plugin / MPE + runs-on: windows-2022 + needs: + - build + - changes + outputs: + version: ${{ steps.version.outputs.version }} + changes: ${{ needs.changes.outputs.changes }} + steps: + - name: Restore cache + uses: actions/cache/restore@v5 + with: + path: ${{ github.workspace }} + key: plugin + + - name: Git Checkout / MPE / XPath + uses: actions/checkout@v6 + with: + repository: Mediaportal-Plugin-Team/Mediaportal-Tools + path: Tools + + - name: MP folder for MPEMaker + run: | + mkdir "C:\Team MediaPortal" + shell: cmd + + - name: Link to MPEMaker + run: | + mklink /J "C:\Team MediaPortal\MediaPortal" "${{ github.workspace }}\Tools\MPEMaker" + shell: cmd + + - name: Get MPE1 Version + id: version + run: | + FOR /F "tokens=*" %%i IN ('..\Tools\Tools\sigcheck.exe -accepteula -nobanner -n "..\MPSync\MPSync\bin\Release\MPSync.dll"') DO (ECHO version=%%i >> %GITHUB_OUTPUT%) + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Update Known Extensions + run: | + MPEUpdater.exe + working-directory: ${{ github.workspace }}\Tools\MPEMaker + shell: cmd + + - name: Build MPE1 + run: | + installer.cmd + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Upload Artifact / MPE1 + uses: actions/upload-artifact@v7 + if: ${{ success() }} + with: + name: MPSync MPE1 + path: | + ${{ github.workspace }}\MPEI\MPSync-*.mpe1 + retention-days: ${{ inputs.retention-build || 90 }} + if-no-files-found: error + + - name: Upload Artifact / MPE XML + uses: actions/upload-artifact@v7 + if: ${{ success() && needs.changes.outputs.changes == 'true' }} + with: + name: MPSync XML + path: | + ${{ github.workspace }}\MPEI\MPSync_update.xml + retention-days: ${{ inputs.retention-build || 90 }} + if-no-files-found: error + + - name: Get Release Version Description + if: ${{ success() && needs.changes.outputs.changes == 'true' }} + run: | + call ..\Tools\XPath\xpath.cmd "MPSync_update.xml" "//Items/PackageClass/GeneralInfo/VersionDescription" last > description.txt + working-directory: ${{ github.workspace }}\MPEI + shell: cmd + + - name: Add Badges to Release Version Description + if: ${{ success() && needs.changes.outputs.changes == 'true' }} + run: | + ECHO. >> description.txt + ECHO [![Downloads](https://img.shields.io/github/downloads/Mediaportal-Plugin-Team/MPSync/v${{steps.version.outputs.version}}/total)](https://github.com/Mediaportal-Plugin-Team/MPSync/releases/tag/v${{steps.version.outputs.version}}) [![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md) >> description.txt + working-directory: ${{ github.workspace }}\MPEI + shell: cmd + + - name: Clean Release Version Description + if: ${{ success() && needs.changes.outputs.changes == 'true' }} + run: | + ..\Tools\Tools\sed.exe -i "s/ \//\//g" description.txt + working-directory: ${{ github.workspace }}\MPEI + shell: cmd + + - name: Upload Artifact / Version Description + uses: actions/upload-artifact@v7 + if: ${{ success() && needs.changes.outputs.changes == 'true' }} + with: + name: MPSync Version Description + path: | + ${{ github.workspace }}\MPEI\description.txt + retention-days: ${{ inputs.retention-build || 90 }} + if-no-files-found: error + + xml: + name: MPSync Plugin / XML + runs-on: ubuntu-latest + if: ${{ needs.mpe.outputs.changes == 'true' }} + needs: + - mpe + permissions: + contents: write + outputs: + changes: ${{ needs.mpe.outputs.changes }} + steps: + - name: Git Checkout + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Download Artifacts + uses: actions/download-artifact@v8 + with: + name: MPSync XML + path: ${{ github.workspace }}/MPEI/ + + - name: Update / MPE1 XML + uses: EndBug/add-and-commit@v9 + with: + message: 'MPSync ${{needs.mpe.outputs.version}} / Release' + add: '${{ github.workspace }}/MPEI/MPSync_update.xml' + + - name: Delete XML Artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: MPSync XML + failOnError: false + + release: + name: MPSync Plugin / Release + if: ${{ needs.mpe.outputs.changes == 'true' }} + needs: + - mpe + - xml + permissions: + contents: write + outputs: + changes: ${{ needs.mpe.outputs.changes }} + + runs-on: ubuntu-latest + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v8 + with: + name: MPSync MPE1 + path: release-files + + - name: Download Artifacts + uses: actions/download-artifact@v8 + with: + name: MPSync Version Description + path: release-description + + - name: Check Artifacts + run: | + ls -l + working-directory: release-files + + - name: Release + uses: softprops/action-gh-release@v2 + with: + name: MPSync v${{needs.mpe.outputs.version}} + tag_name: v${{needs.mpe.outputs.version}} + body_path: release-description/description.txt + generate_release_notes: true + files: | + release-files/*.mpe1 + + - name: Delete MPE1 Artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: MPSync MPE1 + failOnError: false + + - name: Delete Version Description Artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: MPSync Version Description + failOnError: false + + ci-status: + name: Build Status + runs-on: ubuntu-latest + needs: + - build + - mpe + if: always() + steps: + - name: Success + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + - name: Failure + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + release-status: + name: Release Status + if: ${{ needs.release.outputs.changes == 'true' }} + runs-on: ubuntu-latest + needs: + - release + steps: + - name: Success + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + - name: Failure + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + cache-clear: + name: Clear cache + runs-on: ubuntu-latest + needs: + - mpe + if: always() + steps: + - name: Clear cache + uses: easimon/wipe-cache@main diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 0000000..cd2e9c2 --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,69 @@ +name: Test / MPSync Plugin + +on: + workflow_dispatch: + pull_request: + types: + - opened + - synchronize + - edited + - ready_for_review + branches: + - master + +jobs: + build: + name: MPSync Plugin / Build + runs-on: windows-2022 + steps: + - name: Setup Visual Studio 2022 + uses: microsoft/setup-msbuild@v2 + with: + vs-version: 16.11 + + - name: Git Checkout + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Nuget + run: | + nuget restore + working-directory: ${{ github.workspace }}\MPSync + shell: cmd + + - name: Build (x86) + run: | + build.cmd x86 < nul + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Build (x64) + run: | + build.cmd x64 < nul + working-directory: ${{ github.workspace }}\build + shell: cmd + + - name: Upload Artifact / Plugin + uses: actions/upload-artifact@v7 + if: ${{ success() }} + with: + name: MPSync + path: | + ${{ github.workspace }}\MPSync\MPSync\bin\Release\MPSync.dll + retention-days: ${{ inputs.retention-build || 90 }} + if-no-files-found: error + + ci-status: + name: Build Status + runs-on: ubuntu-latest + needs: + - build + if: always() + steps: + - name: Success + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + - name: Failure + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 diff --git a/.github/workflows/workflow_yaml_lint.yml b/.github/workflows/workflow_yaml_lint.yml new file mode 100644 index 0000000..cc51387 --- /dev/null +++ b/.github/workflows/workflow_yaml_lint.yml @@ -0,0 +1,23 @@ +name: Workflow / YAML lint + +on: + push: + branches: [main] + paths: + - "**.yaml" + - "**.yml" + pull_request: + paths: + - "**.yaml" + - "**.yml" + workflow_dispatch: + +jobs: + yamllint: + name: 🧹 Yaml lint + runs-on: ubuntu-latest + steps: + - name: â¤µï¸ Check out configuration from GitHub + uses: actions/checkout@v6 + - name: 🚀 Run yamllint + run: yamllint --strict . diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f401560 --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +#OS junk files +[Tt]humbs.db +*.DS_Store + +#Visual Studio files +*.[Oo]bj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*.vssscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.[Cc]ache +*.ilk +*.log +*.lib +*.sbr +*.sdf +ipch/ +obj/ +[Bb]in +[Dd]ebug*/ +[Rr]elease*/ +Ankh.NoLoad +MPSync/packages/ +#Tooling +_ReSharper*/ +*.resharper +[Tt]est[Rr]esult* + +#Project files +[Bb]uild/ + +#Subversion files +.svn + +# Office Temp Files +~$* \ No newline at end of file diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..8e4e353 --- /dev/null +++ b/.yamllint @@ -0,0 +1,21 @@ +--- +extends: default + +ignore-from-file: .gitignore + +rules: + document-start: disable + empty-lines: + level: error + max: 1 + max-start: 0 + max-end: 1 + indentation: + level: error + spaces: 2 + indent-sequences: true + check-multi-line-strings: false + line-length: disable + truthy: disable + new-lines: disable + comments-indentation: disable diff --git a/External/Common.Utils.dll b/External/Common.Utils.dll new file mode 100644 index 0000000..006014d Binary files /dev/null and b/External/Common.Utils.dll differ diff --git a/External/Core.dll b/External/Core.dll new file mode 100644 index 0000000..1046da0 Binary files /dev/null and b/External/Core.dll differ diff --git a/External/UpdateExternals.bat b/External/UpdateExternals.bat new file mode 100644 index 0000000..dae2de9 --- /dev/null +++ b/External/UpdateExternals.bat @@ -0,0 +1,42 @@ +@echo off +cls +Title Updating externals + +setlocal EnableDelayedExpansion + +set LOG=update.log +echo. > %LOG% + +if "%programfiles(x86)%XXX"=="XXX" goto 32BIT + :: 64-bit + set PROGS=%programfiles(x86)% + goto CONT +:32BIT + set PROGS=%ProgramFiles% +:CONT +IF NOT EXIST "%PROGS%\Team MediaPortal\MediaPortal\" SET PROGS=C: + +echo PROGS=%PROGS% >> %LOG% + +:: Predefined folders +set MP_PROG=%PROGS%\Team MediaPortal\MediaPortal +set MP_PLUG=%MP_PROG%\plugins\Windows +set MP_PROC=%MP_PROG%\plugins\process + +FOR %%i IN (*.dll) DO ( + echo %%i + if exist !MP_PROG!\%%i ( + echo Found %%i in !MP_PROG! >> %LOG% + copy /y "!MP_PROG!\%%i" . >> %LOG% + ) else ( + if exist !MP_PLUG!\%%i ( + echo Found %%i in !MP_PLUG! >> %LOG% + copy /y "!MP_PLUG!\%%i" . >> %LOG% + ) else ( + if exist !MP_PROC!\%%i ( + echo Found %%i in !MP_PROC! >> %LOG% + copy /y "!MP_PROC!\%%i" . >> %LOG% + ) + ) + ) +) diff --git a/External/Utils.dll b/External/Utils.dll new file mode 100644 index 0000000..88bb740 Binary files /dev/null and b/External/Utils.dll differ diff --git a/Externals/System.Data.SQLite.dll b/Externals/System.Data.SQLite.dll deleted file mode 100644 index f72b637..0000000 Binary files a/Externals/System.Data.SQLite.dll and /dev/null differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/MPEI/MPSync.xmp2 b/MPEI/MPSync.xmp2 index badd956..b3def6c 100644 --- a/MPEI/MPSync.xmp2 +++ b/MPEI/MPSync.xmp2 @@ -10,31 +10,31 @@ MPSync install - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync.dll + ..\MPSync\MPSync\bin\Release\MPSync.dll Installer{CopyFile}\{9d3d7efb-e025-422a-8fdd-f24ccf451cfd}-CDB_Sync.dll %Plugins%\process\MPSync.dll - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_Launcher.exe + ..\MPSync_Launcher\MPSync_Launcher\bin\Release\x86\MPSync_Launcher.exe Installer{CopyFile}\{aa975164-ed31-4f2e-90a4-0afebc9adfe9}-MPSync_Launcher.exe %Base%\MPSync_Launcher.exe - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_Process.exe - Installer{CopyFile}\{bc675913-e281-499c-853f-6ba39a64a7b7}-MPSync_Process.exe - %Base%\MPSync_Process.exe + ..\MPSync_Launcher\MPSync_Launcher\bin\Release\x64\MPSync_Launcher.exe + Installer{CopyFile}\{dc92e07c-11f9-4751-b74a-28ed195fb914}-MPSync_Launcher.exe + %Base%\MPSync_Launcher.exe - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_DirectoryEnumerator.dll + ..\MPSync\FastDirectoryEnumerator\bin\Release\MPSync_DirectoryEnumerator.dll Installer{CopyFile}\{c84def1a-3a36-4335-97c3-99dc63114fde}-MPSync_DirectoryEnumerator.dll %Plugins%\process\MPSync_DirectoryEnumerator.dll @@ -48,12 +48,26 @@ SQLite - + AlwaysOverwrite - ..\..\..\..\MPSync\System.Data.SQLite.dll + ..\MPSync\MPSync\bin\Release\System.Data.SQLite.dll Installer{CopyFile}\{fde0e846-bd88-4806-9aa1-01837c53aa25}-System.Data.SQLite.dll - %Base%\System.Data.SQLite.dll + %Plugins%\process\System.Data.SQLite.dll + + + + AlwaysOverwrite + ..\MPSync\MPSync\bin\Release\x86\SQLite.Interop.dll + Installer{CopyFile}\{a0bd48e7-3523-4734-a693-f1c331346115}-SQLite.Interop.dll + %Plugins%\process\x86\SQLite.Interop.dll + + + + AlwaysOverwrite + ..\MPSync\MPSync\bin\Release\x64\SQLite.Interop.dll + Installer{CopyFile}\{263c7de5-cba7-4ec3-84b3-d256b0617398}-SQLite.Interop.dll + %Plugins%\process\x64\SQLite.Interop.dll @@ -62,7 +76,7 @@ - + @@ -96,7 +110,7 @@ Click Next to continue or Cancel to exit Setup. Welcome Screen NextCancel - + @@ -118,13 +132,13 @@ Click Next to continue or Cancel to exit Setup. - + AfterPanelShow - + @@ -158,7 +172,7 @@ Click Next to continue or Cancel to exit Setup. Install Section Next - + @@ -185,7 +199,7 @@ Click Next to continue or Cancel to exit Setup. - + @@ -226,6 +240,7 @@ Click Next to continue or Cancel to exit Setup. true requires Moving Pictures version 1.5.1.1487 or higher Moving Pictures + None Extension @@ -245,25 +260,27 @@ Click Next to continue or Cancel to exit Setup. true requires MP-TVSeries version 3.4.2.2018 or higher MP-TVSeries + None MediaPortal 1 - 1 - 6 - 27644 + 32 + 100 + 0 - 1 - 1 - 6 - 27644 + * + * + * + * false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. + Requires MediaPortal 1.32.100.0 or higher! MediaPortal + None @@ -293,20 +310,24 @@ Click Next to continue or Cancel to exit Setup. m3rcury http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=52 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml 1 0 - 0 - 22 + 6 + 0 This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Added some more logging and minor bug fixing. Bumping up SQLite version. + - Improved exception logging +- Fix for overwriting watched and resume status of moving pictures database +- Fix for loading wrong dll in MP 1.36 + Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2018-09-24T23:39:41 + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v[Version]/MPSync-[Version].mpe1 + 2024-12-20T23:23:23 synchronization, database, thumbs, any folder you set up. - D:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 + AnyCPU + [Name]-[Version].mpe1 @@ -341,60 +362,74 @@ Click Next to continue or Cancel to exit Setup. - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync.dll + ..\MPSync\MPSync\bin\Release\MPSync.dll Installer{CopyFile}\{9d3d7efb-e025-422a-8fdd-f24ccf451cfd}-CDB_Sync.dll %Plugins%\process\MPSync.dll - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_Launcher.exe + ..\MPSync_Launcher\MPSync_Launcher\bin\Release\x86\MPSync_Launcher.exe Installer{CopyFile}\{aa975164-ed31-4f2e-90a4-0afebc9adfe9}-MPSync_Launcher.exe %Base%\MPSync_Launcher.exe - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_Process.exe - Installer{CopyFile}\{bc675913-e281-499c-853f-6ba39a64a7b7}-MPSync_Process.exe - %Base%\MPSync_Process.exe + ..\MPSync_Launcher\MPSync_Launcher\bin\Release\x64\MPSync_Launcher.exe + Installer{CopyFile}\{dc92e07c-11f9-4751-b74a-28ed195fb914}-MPSync_Launcher.exe + %Base%\MPSync_Launcher.exe - + AlwaysOverwrite - ..\..\..\..\MPSync\MPSync_DirectoryEnumerator.dll + ..\MPSync\FastDirectoryEnumerator\bin\Release\MPSync_DirectoryEnumerator.dll Installer{CopyFile}\{c84def1a-3a36-4335-97c3-99dc63114fde}-MPSync_DirectoryEnumerator.dll %Plugins%\process\MPSync_DirectoryEnumerator.dll - + AlwaysOverwrite - ..\..\..\..\MPSync\System.Data.SQLite.dll + ..\MPSync\MPSync\bin\Release\System.Data.SQLite.dll Installer{CopyFile}\{fde0e846-bd88-4806-9aa1-01837c53aa25}-System.Data.SQLite.dll - %Base%\System.Data.SQLite.dll + %Plugins%\process\System.Data.SQLite.dll + + + + AlwaysOverwrite + ..\MPSync\MPSync\bin\Release\x86\SQLite.Interop.dll + Installer{CopyFile}\{a0bd48e7-3523-4734-a693-f1c331346115}-SQLite.Interop.dll + %Plugins%\process\x86\SQLite.Interop.dll + + + + AlwaysOverwrite + ..\MPSync\MPSync\bin\Release\x64\SQLite.Interop.dll + Installer{CopyFile}\{263c7de5-cba7-4ec3-84b3-d256b0617398}-SQLite.Interop.dll + %Plugins%\process\x64\SQLite.Interop.dll - + OverwriteIfOlder MPSync.png - Installer{CopyFile}\{0e36e025-fd3a-48f3-b8ee-10ab628e5d69}-MPSync.png + Installer{CopyFile}\{8a36270c-eb35-4497-bafc-f81383cdc9a2}-MPSync.png - + OverwriteIfOlder MPSync_logo.png - Installer{CopyFile}\{52ff3fbf-3a95-457f-9469-cd07e843ada9}-MPSync_logo.png + Installer{CopyFile}\{43497d95-e973-4867-b86c-2f9ab2402319}-MPSync_logo.png - + OverwriteIfOlder MP_Packaging.png - Installer{CopyFile}\{804c2894-f2b6-4895-8c6a-6c0377f28d4f}-MP_Packaging.png + Installer{CopyFile}\{31e4c41c-6c7d-4d85-9834-ad8422fcab5a}-MP_Packaging.png @@ -402,7 +437,7 @@ Click Next to continue or Cancel to exit Setup. MPSync.xmp2 - D:\Software\MediaPortal\Subversion\MPSync.git\trunk\MPSync\MPSync_update.xml + MPSync_update.xml diff --git a/MPEI/MPSync_Launcher.exe b/MPEI/MPSync_Launcher.exe deleted file mode 100644 index 39b0aa6..0000000 Binary files a/MPEI/MPSync_Launcher.exe and /dev/null differ diff --git a/MPEI/MPSync_update.xml b/MPEI/MPSync_update.xml new file mode 100644 index 0000000..23f0050 --- /dev/null +++ b/MPEI/MPSync_update.xml @@ -0,0 +1,1167 @@ + + + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=52 + + 1 + 0 + 0 + 24 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + - Fixed missing triggers + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.0.24/MPSync-1.0.0.24.mpe1 + 2024-04-30T20:45:10.7254472+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 1 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + - Fixed missing triggers + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.1/MPSync-1.0.5.1.mpe1 + 2024-05-16T18:25:42.1110469+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 103 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + - Fixed missing triggers + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.103/MPSync-1.0.5.103.mpe1 + 2024-05-16T20:16:57.5467521+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 106 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + * Fixed missing triggers +* Fix SQLite.Interop location + + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.106/MPSync-1.0.5.106.mpe1 + 2024-05-21T18:24:03.1092356+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 109 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + * better exception logging + + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.109/MPSync-1.0.5.109.mpe1 + 2024-05-24T15:17:21.6592184+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 114 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + - Improved exception logging +- reverted Fix SQLite.Interop location + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.114/MPSync-1.0.5.114.mpe1 + 2024-05-25T14:02:29.2255548+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + 2.0 + + + + Default + true + Default + + + + + + SQLite + true + SQLite + + + + + + + + + + + + + Extension + 284fc21c-86e3-4346-bf31-9e38c75e0242 + + 1 + 5 + 1 + 1487 + + + 9 + 9 + 9 + 9 + + true + requires Moving Pictures version 1.5.1.1487 or higher + Moving Pictures + None + + + Extension + 5e2777c3-966c-407f-b5a9-e51205b70b3e + + 3 + 4 + 2 + 2018 + + + 9 + 9 + 9 + 9 + + true + requires MP-TVSeries version 3.4.2.2018 or higher + MP-TVSeries + None + + + MediaPortal + + + 1 + 32 + 100 + 0 + + + * + * + * + * + + false + Requires MediaPortal 1.32.100.0 or higher! + MediaPortal + None + + + + + + + + + + 1.6.100.0 + 1.6.100.0 + + + + + + + + + + + + + + MPSync + 8ddbfb53-7222-41fd-a139-407eacd78464 + m3rcury + http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en + http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 + https://raw.githubusercontent.com/Mediaportal-Plugin-Team/MPSync/master/MPEI/MPSync_update.xml + + 1 + 0 + 5 + 124 + + This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. + - Improved exception logging +- Fix for overwriting watched and resume status of moving pictures database +- Fix for loading wrong dll in MP 1.36 + + Stable + https://github.com/Mediaportal-Plugin-Team/MPSync/releases/download/v1.0.5.124/MPSync-1.0.5.124.mpe1 + 2024-12-20T18:16:57.2776269+00:00 + synchronization, database, thumbs, any folder you set up. + AnyCPU + [Name]-[Version].mpe1 + + + + + String + The icon file of the package stored online (jpg,png,bmp) + + + + Template + The file used to configure the extension. + If have .exe extension the will be executed + If have .dll extension used like MP plugin configuration + + + http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg + String + Online stored screenshot urls separated by ; + + + YES + Bool + Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. + + + + + + + + + + + false + + + \ No newline at end of file diff --git a/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj b/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj index 1f97356..d8ac030 100644 --- a/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj +++ b/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj @@ -10,7 +10,7 @@ Properties DirectoryEnumerator MPSync_DirectoryEnumerator - v4.6 + v4.7.2 512 diff --git a/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj.user b/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj.user deleted file mode 100644 index fb3fd5d..0000000 --- a/MPSync/FastDirectoryEnumerator/DirectoryEnumerator.csproj.user +++ /dev/null @@ -1,13 +0,0 @@ - - - - publish\ - - - - - - en-US - false - - \ No newline at end of file diff --git a/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.dll b/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.dll deleted file mode 100644 index c653ada..0000000 Binary files a/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.dll and /dev/null differ diff --git a/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.pdb b/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.pdb deleted file mode 100644 index c2ef6b4..0000000 Binary files a/MPSync/FastDirectoryEnumerator/bin/Release/MPSync_DirectoryEnumerator.pdb and /dev/null differ diff --git a/MPSync/FastDirectoryEnumerator/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/MPSync/FastDirectoryEnumerator/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index 5f1e652..0000000 Binary files a/MPSync/FastDirectoryEnumerator/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/MPSync/FastDirectoryEnumerator/obj/Release/TempPE/Properties.Resources.Designer.cs.dll b/MPSync/FastDirectoryEnumerator/obj/Release/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index 2c55873..0000000 Binary files a/MPSync/FastDirectoryEnumerator/obj/Release/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/MPSync/MPSync.sln b/MPSync/MPSync.sln index edd43f6..a829994 100644 --- a/MPSync/MPSync.sln +++ b/MPSync/MPSync.sln @@ -1,28 +1,51 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26228.12 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33529.622 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MPSync", "MPSync\MPSync.vbproj", "{C23857F2-6BA9-4FA4-9D15-B535C5C41564}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MPSync_Launcher", "..\MPSync_Launcher\MPSync_Launcher\MPSync_Launcher.csproj", "{F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoryEnumerator", "FastDirectoryEnumerator\DirectoryEnumerator.csproj", "{B178092B-06CF-4FCF-9D20-69E14650136F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x86.ActiveCfg = Debug|x86 - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x86.Build.0 = Debug|x86 - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|Any CPU.ActiveCfg = Release|x86 - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|Any CPU.Build.0 = Release|x86 - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x86.ActiveCfg = Release|x86 - {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x86.Build.0 = Release|x86 + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x64.ActiveCfg = Debug|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x64.Build.0 = Debug|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x86.ActiveCfg = Debug|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Debug|x86.Build.0 = Debug|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x64.ActiveCfg = Release|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x64.Build.0 = Release|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x86.ActiveCfg = Release|Any CPU + {C23857F2-6BA9-4FA4-9D15-B535C5C41564}.Release|x86.Build.0 = Release|Any CPU + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x64.ActiveCfg = Debug|x64 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x64.Build.0 = Debug|x64 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x86.ActiveCfg = Debug|x86 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x86.Build.0 = Debug|x86 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x64.ActiveCfg = Release|x64 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x64.Build.0 = Release|x64 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x86.ActiveCfg = Release|x86 + {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x86.Build.0 = Release|x86 + {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|x64.ActiveCfg = Debug|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|x64.Build.0 = Debug|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|x86.ActiveCfg = Debug|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|x86.Build.0 = Debug|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|x64.ActiveCfg = Release|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|x64.Build.0 = Release|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|x86.ActiveCfg = Release|Any CPU + {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A549E90C-7B37-4F09-9663-1B2FD9BB1058} + EndGlobalSection EndGlobal diff --git a/MPSync/MPSync/MPSync.vbproj b/MPSync/MPSync/MPSync.vbproj index 861c467..10522ff 100644 --- a/MPSync/MPSync/MPSync.vbproj +++ b/MPSync/MPSync/MPSync.vbproj @@ -2,7 +2,7 @@ Debug - x86 + AnyCPU 2.0 @@ -14,7 +14,7 @@ MPSync 512 Windows - v4.6 + v4.7.2 false @@ -32,28 +32,8 @@ 1.0.0.%2a false true - - - x86 - true - full - true - true - bin\Debug\ - MPSync.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false - - - x86 - pdbonly - false - true - true - bin\Release\ - MPSync.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false + + On @@ -98,26 +78,20 @@ My Project\app.manifest - + False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Common.Utils.dll + ..\..\External\Common.Utils.dll True - + False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Core.dll - True - - - ..\FastDirectoryEnumerator\bin\Release\MPSync_DirectoryEnumerator.dll + ..\..\External\Core.dll True - - False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\System.Data.SQLite.dll - True + + ..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\lib\net40\System.Data.SQLite.dll @@ -127,7 +101,7 @@ False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Utils.dll + ..\..\External\Utils.dll True @@ -219,6 +193,7 @@ + @@ -234,7 +209,20 @@ + + + {b178092b-06cf-4fcf-9d20-69e14650136f} + DirectoryEnumerator + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + " & _db_server, "INFO") + logStats("MPSync: DB - " & _db_client & " --> " & _db_server, MessageType.INFO) Case 2 - logStats("MPSync: DB - " & _db_client & " <-- " & _db_server, "INFO") + logStats("MPSync: DB - " & _db_client & " <-- " & _db_server, MessageType.INFO) End Select - logStats("MPSync: DB synchronization method - " & i_method(_db_sync_method), "INFO") + logStats("MPSync: DB synchronization method - " & i_method(_db_sync_method), MessageType.INFO) If databases = Nothing Then - logStats("MPSync: DBs selected - ALL", "INFO") + logStats("MPSync: DBs selected - ALL", MessageType.INFO) Else - logStats("MPSync: DBs selected - " & databases, "INFO") + logStats("MPSync: DBs selected - " & databases, MessageType.INFO) End If If check_watched Then If watched_dbs = Nothing Then - logStats("MPSync: watched/resume selected for ALL", "INFO") + logStats("MPSync: watched/resume selected for ALL", MessageType.INFO) Else - logStats("MPSync: watched/resume selected for " & watched_dbs, "INFO") + logStats("MPSync: watched/resume selected for " & watched_dbs, MessageType.INFO) End If Else - logStats("MPSync: watched/resume not selected", "INFO") + logStats("MPSync: watched/resume not selected", MessageType.INFO) End If If objects = Nothing Then - logStats("MPSync: Objects selected - ALL", "INFO") + logStats("MPSync: Objects selected - ALL", MessageType.INFO) Else - logStats("MPSync: Objects selected - " & objects, "INFO") + logStats("MPSync: Objects selected - " & objects, MessageType.INFO) End If End If @@ -273,31 +280,29 @@ Public Class MPSync_process If item(1) = "True" Then - item(0) = UCase(item(0)) - getObjectSettings(item(0)) Select Case _folders_direction Case 0 - logStats("MPSync: " & item(0) & " - " & _folders_client & " <-> " & _folders_server, "INFO") + logStats("MPSync: " & item(0) & " - " & _folders_client & " <-> " & _folders_server, MessageType.INFO) Case 1 - logStats("MPSync: " & item(0) & " - " & _folders_client & " --> " & _folders_server, "INFO") + logStats("MPSync: " & item(0) & " - " & _folders_client & " --> " & _folders_server, MessageType.INFO) Case 2 - logStats("MPSync: " & item(0) & " - " & _folders_client & " <-- " & _folders_server, "INFO") + logStats("MPSync: " & item(0) & " - " & _folders_client & " <-- " & _folders_server, MessageType.INFO) End Select If _folders_md5 = "True" Then - logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause & ", use MD5 - " & _folders_md5, "INFO") + logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause & ", use MD5 - " & _folders_md5, MessageType.INFO) ElseIf _folders_crc32 = "True" Then - logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause & ", use CRC32 - " & _folders_crc32, "INFO") + logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause & ", use CRC32 - " & _folders_crc32, MessageType.INFO) Else - logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause, "INFO") + logStats("MPSync: " & item(0) & " synchronization method - " & i_method(_folders_sync_method) & ", pause while playing - " & _folders_pause, MessageType.INFO) End If If folders = Nothing Then - logStats("MPSync: " & item(0) & " selected - ALL", "INFO") + logStats("MPSync: " & item(0) & " selected - ALL", MessageType.INFO) Else - logStats("MPSync: " & item(0) & " selected - " & folders, "INFO") + logStats("MPSync: " & item(0) & " selected - " & folders, MessageType.INFO) End If End If @@ -307,15 +312,15 @@ Public Class MPSync_process End If If checkThreads("DB") = -1 Then - logStats("MPSync: Maximum DB threads - No limit", "INFO") + logStats("MPSync: Maximum DB threads - No limit", MessageType.INFO) Else - logStats("MPSync: Maximum DB threads - [" & checkThreads("DB").ToString & "]", "INFO") + logStats("MPSync: Maximum DB threads - [" & checkThreads("DB").ToString & "]", MessageType.INFO) End If If checkThreads("folder") = -1 Then - logStats("MPSync: Maximum Folder threads - No limit", "INFO") + logStats("MPSync: Maximum Folder threads - No limit", MessageType.INFO) Else - logStats("MPSync: Maximum Folder threads - [" & checkThreads("folder").ToString & "]", "INFO") + logStats("MPSync: Maximum Folder threads - [" & checkThreads("folder").ToString & "]", MessageType.INFO) End If If _db_client <> Nothing And _db_server <> Nothing And checked_databases Then @@ -367,7 +372,7 @@ Public Class MPSync_process Dim checkDBPath_Thread As Thread checkDBPath_Thread = New Thread(AddressOf checkPath) - logStats("MPSync: Checking availability of " & _db_server, "LOG") + logStats("MPSync: Checking availability of " & _db_server, MessageType.LOG) checkDBPath_Thread.Start(_db_server) @@ -375,7 +380,7 @@ Public Class MPSync_process wait(5, False) Loop - logStats("MPSync: " & _db_server & " is available.", "LOG") + logStats("MPSync: " & _db_server & " is available.", MessageType.LOG) ' execute only once in a day If DateDiff(DateInterval.Day, CDate(lastsync), Now) > 0 Then @@ -417,7 +422,7 @@ Public Class MPSync_process Dim checkOBJPath_Thread As Thread checkOBJPath_Thread = New Thread(AddressOf checkPath) - logStats("MPSync: Checking availability of " & _folders_server, "LOG") + logStats("MPSync: Checking availability of " & _folders_server, MessageType.LOG) checkOBJPath_Thread.Start(_folders_server) @@ -425,7 +430,7 @@ Public Class MPSync_process wait(5, False) Loop - logStats("MPSync: " & _folders_server & " is available.", "LOG") + logStats("MPSync: " & _folders_server & " is available.", MessageType.LOG) End If @@ -437,7 +442,7 @@ Public Class MPSync_process If Not MPSync_settings.syncnow Then - logStats("MPSync: Immediate Synchronization started", "DEBUG") + logStats("MPSync: Immediate Synchronization started", MessageType.DEBUG) Dim autoEvent As New AutoResetEvent(False) @@ -453,72 +458,81 @@ Public Class MPSync_process Public Shared Function TableExist(ByVal path As String, ByVal database As String, ByVal table As String, Optional ByVal dropifempty As Boolean = False) As Boolean - If debug Then MPSync_process.logStats("MPSync: [TableExist] Check if table " & table & " in database " & path & database & " exists.", "DEBUG") + If debug Then MPSync_process.logStats("MPSync: [TableExist] Check if table " & table & " in database " & path & database & " exists.", MessageType.DEBUG) - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader - Dim exist As Boolean = False + Try - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + Dim exist As Boolean = False - If Not dropifempty Then SQLconnect.ConnectionString += ";Read Only=True;" + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.Open() - SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='" & table & "'" - SQLreader = SQLcommand.ExecuteReader() + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) - While SQLreader.Read() - exist = True - End While + If Not dropifempty Then SQLconnect.ConnectionString += ";Read Only=True;" - SQLreader.Close() + SQLconnect.Open() + SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='" & table & "'" + Using SQLreader = SQLcommand.ExecuteReader() - If exist And dropifempty Then - SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table - SQLreader = SQLcommand.ExecuteReader() - SQLreader.Read() + While SQLreader.Read() + exist = True + End While - If Int(SQLreader(0)) = 0 Then - SQLreader.Close() - SQLcommand.CommandText = "DROP TABLE " & table - Try - SQLcommand.ExecuteNonQuery() - exist = False - Catch ex As Exception - logStats("MPSync: [TableExist] Table not dropped with exception - " & ex.Message, "ERROR") - End Try - End If - End If + End Using + + If exist And dropifempty Then + SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + + If Int(SQLreader(0)) = 0 Then + SQLreader.Close() + SQLcommand.CommandText = "DROP TABLE " & table + Try + SQLcommand.ExecuteNonQuery() + exist = False + Catch ex As Exception + logStats("MPSync: [TableExist] Table not dropped with exception - " & ex.Message, MessageType.ERR) + End Try + End If + End Using + End If - SQLconnect.Close() + End Using - Return exist + Return exist + + Catch ex As Exception + logStats("MPSync: [TableExist] Unexpected error " & ex.Message, MessageType.ERR) + End Try + + Return False End Function Private Function FieldExist(ByVal path As String, ByVal database As String, ByVal table As String, ByVal field As String) As Boolean - If debug Then MPSync_process.logStats("MPSync: [FieldExist] Check field exists for table " & table & " in database " & path & database, "DEBUG") + If debug Then MPSync_process.logStats("MPSync: [FieldExist] Check field exists for table " & table & " in database " & path & database, MessageType.DEBUG) - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader Dim columns() As String = Nothing Dim x As Integer = 0 - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) & ";Read Only=True;" - SQLconnect.Open() - SQLcommand.CommandText = "PRAGMA table_info (" & table & ")" - SQLreader = SQLcommand.ExecuteReader() + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - While SQLreader.Read() - ReDim Preserve columns(x) - columns(x) = LCase(SQLreader(1)) - x += 1 - End While + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) & ";Read Only=True;" + SQLconnect.Open() + SQLcommand.CommandText = "PRAGMA table_info (" & table & ")" + Using SQLreader = SQLcommand.ExecuteReader() - SQLconnect.Close() + While SQLreader.Read() + ReDim Preserve columns(x) + columns(x) = LCase(SQLreader.GetString(1)) + x += 1 + End While + End Using + End Using If x = 0 Then ReDim Preserve columns(0) @@ -526,9 +540,9 @@ Public Class MPSync_process End Function - Private Function FieldList(ByVal path As String, ByVal database As String, ByVal table As String, ByVal fields As Array, Optional ByVal prefix As String = Nothing) As String + Private Function FieldList(ByVal path As String, ByVal database As String, ByVal table As String, ByVal fields As String(), Optional ByVal prefix As String = Nothing) As String - If debug Then MPSync_process.logStats("MPSync: [FieldList] Get fields for table " & table & " in database " & path & database, "DEBUG") + If debug Then MPSync_process.logStats("MPSync: [FieldList] Get fields for table " & table & " in database " & path & database, MessageType.DEBUG) Dim f_list As String = Nothing @@ -548,7 +562,7 @@ Public Class MPSync_process Private Sub getDBInfo(ByVal source As String, ByVal target As String) - logStats("MPSync: [getDBInfo] Background threads for database integrity checking started.", "DEBUG") + logStats("MPSync: [getDBInfo] Background threads for database integrity checking started.", MessageType.DEBUG) Dim x As Integer = 0 Dim bw_checkDB() As BackgroundWorker = Nothing @@ -565,7 +579,7 @@ Public Class MPSync_process If checkThreads("DB") <> -1 Then Do While bw_threads >= checkThreads("DB") - logStats("MPSync: [getDBInfo] waiting for available threads.", "DEBUG") + logStats("MPSync: [getDBInfo] waiting for available threads.", MessageType.DEBUG) wait(10, False) Loop @@ -578,18 +592,20 @@ Public Class MPSync_process dbinfo(x) = My.Computer.FileSystem.GetFileInfo(database) bw_dbs.Add(dbname(x)) - logStats("MPSync: [getDBInfo] starting background thread for database " & database, "DEBUG") + logStats("MPSync: [getDBInfo] starting background thread for database " & database, MessageType.DEBUG) ReDim Preserve bw_checkDB(x) bw_checkDB(x) = New BackgroundWorker bw_checkDB(x).WorkerSupportsCancellation = True AddHandler bw_checkDB(x).DoWork, AddressOf bw_checkDB_worker + AddHandler bw_checkDB(x).RunWorkerCompleted, AddressOf bw_checkDB_exception + bw_checkDB(x).RunWorkerAsync(target & "|" & dbname(x) & "|" & database & "|" & source) x += 1 bw_threads += 1 Catch ex As Exception - logStats("MPSync: [getDBInfo] Failed to trigger background threads for database integrity checking.", "ERROR") + logStats("MPSync: [getDBInfo] Failed to trigger background threads for database integrity checking.", MessageType.ERR) End Try End If @@ -601,77 +617,87 @@ Public Class MPSync_process Do While bw_threads > 0 Dim jobs As String = String.Join(",", bw_dbs.ToArray()) If jobs = String.Empty Then Exit Do - logStats("MPSync: [getDBInfo] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", "DEBUG") + logStats("MPSync: [getDBInfo] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", MessageType.DEBUG) wait(10, False) Loop - logStats("MPSync: [getDBInfo] Background threads for database integrity checking complete.", "DEBUG") + logStats("MPSync: [getDBInfo] Background threads for database integrity checking complete.", MessageType.DEBUG) End Sub - Private Sub bw_checkDB_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) + Private Sub bw_checkDB_exception(sender As System.Object, e As RunWorkerCompletedEventArgs) - Dim check As String = "ok" - Dim parm() As String = Split(e.Argument, "|") + If e.Error IsNot Nothing Then + logStats("MPSync: [getDBInfo] Exception " & e.Error.Message, MessageType.ERR) + End If - logStats("MPSync: [getDBInfo][bw_checkDB_worker] Checking integrity of database " & parm(0) & parm(1) & " in progress...", "LOG") + End Sub - If IO.File.Exists(parm(0) & parm(1)) Then + Private Sub bw_checkDB_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) + Try - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader + Dim check As String = "ok" + Dim parm() As String = Split(e.Argument, "|") - Try - SQLconnect.ConnectionString = "Data Source=" & p_Database(parm(0) & parm(1)) & ";Read Only=True;" - SQLconnect.Open() - SQLcommand.CommandText = "PRAGMA integrity_check;" - SQLreader = SQLcommand.ExecuteReader() - SQLreader.Read() - check = SQLreader(0) - SQLreader.Close() - Catch ex As Exception - check = "error" - End Try + logStats("MPSync: [getDBInfo][bw_checkDB_worker] Checking integrity of database " & parm(0) & parm(1) & " in progress...", MessageType.LOG) - SQLconnect.Close() + If IO.File.Exists(parm(0) & parm(1)) Then + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - If check = "ok" And _vacuum Then - logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM of database " & parm(0) & parm(1) & " started.", "LOG") + Try + SQLconnect.ConnectionString = "Data Source=" & p_Database(parm(0) & parm(1)) & ";Read Only=True;" + SQLconnect.Open() + SQLcommand.CommandText = "PRAGMA integrity_check;" + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + check = SQLreader.GetString(0) + End Using + Catch ex As Exception + check = "error" + End Try + End Using - Try - SQLconnect.ConnectionString = "Data Source=" & p_Database(parm(0) & parm(1)) & ";" - SQLconnect.Open() - SQLcommand.CommandText = "VACUUM;" - SQLcommand.ExecuteNonQuery() - logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM of database " & parm(0) & parm(1) & " complete.", "LOG") - Catch ex As Exception - logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM database " & parm(2) & " failed with exception: " & ex.Message, "ERROR") - End Try + If check = "ok" And _vacuum Then + logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM of database " & parm(0) & parm(1) & " started.", MessageType.LOG) + + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Try + SQLconnect.ConnectionString = "Data Source=" & p_Database(parm(0) & parm(1)) & ";" + SQLconnect.Open() + SQLcommand.CommandText = "VACUUM;" + SQLcommand.ExecuteNonQuery() + logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM of database " & parm(0) & parm(1) & " complete.", MessageType.LOG) + Catch ex As Exception + logStats("MPSync: [getDBInfo][bw_checkDB_worker] VACUUM database " & parm(2) & " failed with exception: " & ex.Message, MessageType.ERR) + End Try + End Using + End If + + If check <> "ok" Then IO.File.Delete(parm(0) & parm(1)) - SQLconnect.Close() End If - If check <> "ok" Then IO.File.Delete(parm(0) & parm(1)) + Try + If Not IO.File.Exists(parm(0) & parm(1)) Then + logStats("MPSync: Copying database " & parm(2) & " to target.", MessageType.LOG) + IO.File.Copy(parm(2), parm(0) & parm(1), True) + Drop_Triggers(parm(0), parm(1), "mpsync_update|mpsync_watch") + check = "copied database from source" + End If + Catch ex As Exception + logStats("MPSync: [getDBInfo][bw_checkDB_worker] Error while copying database " & parm(2) & " with exception: " & ex.Message, MessageType.ERR) + End Try - End If + logStats("MPSync: [getDBInfo][bw_checkDB_worker] Checking integrity of database " & parm(0) & parm(1) & " complete - Status: " & check, MessageType.LOG) - Try - If Not IO.File.Exists(parm(0) & parm(1)) Then - logStats("MPSync: Copying database " & parm(2) & " to target.", "LOG") - IO.File.Copy(parm(2), parm(0) & parm(1), True) - Drop_Triggers(parm(0), parm(1), "mpsync_update|mpsync_watch") - check = "copied database from source" - End If + bw_threads -= 1 + bw_dbs.RemoveAt(bw_dbs.IndexOf(parm(1))) Catch ex As Exception - logStats("MPSync: [getDBInfo][bw_checkDB_worker] Error while copying database " & parm(2) & " with exception: " & ex.Message, "ERROR") + logStats("MPSync: [getDBInfo][bw_checkDB_worker] Unexpected error " & ex.Message, MessageType.ERR) End Try - logStats("MPSync: [getDBInfo][bw_checkDB_worker] Checking integrity of database " & parm(0) & parm(1) & " complete - Status: " & check, "LOG") - - bw_threads -= 1 - bw_dbs.RemoveAt(bw_dbs.IndexOf(parm(1))) - End Sub Private Sub checkTriggers(ByVal mode As String) @@ -679,12 +705,12 @@ Public Class MPSync_process Dim x As Integer Dim bw_checkTriggers() As BackgroundWorker = Nothing - logStats("MPSync: [checkTriggers] Background threads for WATCH Trigger checking started.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for WATCH Trigger checking started.", MessageType.DEBUG) bw_threads = 0 bw_dbs.Clear() - mps.SetWatched = Nothing + mps.SetWatched() For x = 0 To UBound(_watched_dbs) @@ -694,7 +720,7 @@ Public Class MPSync_process If checkThreads("DB") <> -1 Then Do While bw_threads >= checkThreads("DB") - logStats("MPSync: [checkTriggers] waiting for available threads.", "DEBUG") + logStats("MPSync: [checkTriggers] waiting for available threads.", MessageType.DEBUG) wait(10, False) Loop @@ -720,15 +746,15 @@ Public Class MPSync_process Do While bw_threads > 0 Dim jobs As String = String.Join(",", bw_dbs.ToArray()) If jobs = String.Empty Then Exit Do - logStats("MPSync: [checkTriggers - WATCH] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", "DEBUG") + logStats("MPSync: [checkTriggers - WATCH] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", MessageType.DEBUG) wait(10, False) Loop - logStats("MPSync: [checkTriggers] Background threads for WATCH Trigger checking complete.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for WATCH Trigger checking complete.", MessageType.DEBUG) If sync_type = "Triggers" Then - logStats("MPSync: [checkTriggers] Background threads for WORK Trigger checking started.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for WORK Trigger checking started.", MessageType.DEBUG) bw_threads = 0 bw_dbs.Clear() @@ -746,7 +772,7 @@ Public Class MPSync_process If checkThreads("DB") <> -1 Then Do While bw_threads >= checkThreads("DB") - logStats("MPSync: [checkTriggers] waiting for available threads.", "DEBUG") + logStats("MPSync: [checkTriggers] waiting for available threads.", MessageType.DEBUG) wait(10, False) Loop @@ -777,7 +803,7 @@ Public Class MPSync_process If checkThreads("DB") <> -1 Then Do While bw_threads >= checkThreads("DB") - logStats("MPSync: [checkTriggers] waiting for available threads.", "DEBUG") + logStats("MPSync: [checkTriggers] waiting for available threads.", MessageType.DEBUG) wait(10, False) Loop @@ -801,18 +827,18 @@ Public Class MPSync_process Do While bw_threads > 0 Dim jobs As String = String.Join(",", bw_dbs.ToArray()) If jobs = String.Empty Then Exit Do - logStats("MPSync: [checkTriggers - WORK] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", "DEBUG") + logStats("MPSync: [checkTriggers - WORK] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", MessageType.DEBUG) wait(10, False) Loop - logStats("MPSync: [checkTriggers] Background threads for WORK Trigger checking complete.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for WORK Trigger checking complete.", MessageType.DEBUG) End If ' remove triggers from local, if any If sync_type = "Timestamp" Or mode = "server>client" Then - logStats("MPSync: [checkTriggers] Background threads for DROP Trigger started.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for DROP Trigger started.", MessageType.DEBUG) bw_threads = 0 bw_dbs.Clear() @@ -825,7 +851,7 @@ Public Class MPSync_process If checkThreads("DB") <> -1 Then Do While bw_threads >= checkThreads("DB") - logStats("MPSync: [checkTriggers] waiting for available threads.", "DEBUG") + logStats("MPSync: [checkTriggers] waiting for available threads.", MessageType.DEBUG) wait(10, False) Loop @@ -847,11 +873,11 @@ Public Class MPSync_process Do While bw_threads > 0 Dim jobs As String = String.Join(",", bw_dbs.ToArray()) If jobs = String.Empty Then Exit Do - logStats("MPSync: [checkTriggers - DROP] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", "DEBUG") + logStats("MPSync: [checkTriggers - DROP] waiting for background threads to finish... " & bw_threads.ToString & " threads remaining processing {" & jobs & "}.", MessageType.DEBUG) wait(10, False) Loop - logStats("MPSync: [checkTriggers] Background threads for DROP Trigger complete.", "DEBUG") + logStats("MPSync: [checkTriggers] Background threads for DROP Trigger complete.", MessageType.DEBUG) End If @@ -859,42 +885,54 @@ Public Class MPSync_process Private Sub bw_watchtriggers_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) - Dim parm() As String = Split(e.Argument, "|") + Try + + Dim parm() As String = Split(e.Argument, "|") - logStats("MPSync: [checkTriggers][bw_watchtriggers_worker] Background watch trigger thread on database " & parm(1) & " for " & parm(0) & " started.", "DEBUG") + logStats("MPSync: [checkTriggers][bw_watchtriggers_worker] Background watch trigger thread on database " & parm(1) & " for " & parm(0) & " started.", MessageType.DEBUG) - If parm(0) = "ADD" Then - Create_Watch_Tables(_db_client, parm(1)) - Create_Watch_Tables(_db_server, parm(1)) - Drop_Triggers(_db_client, parm(1), "mpsync_update|mpsync_watch") - If _db_direction <> 1 Then - Create_Watch_Triggers(_db_client, parm(1)) + If parm(0) = "ADD" Then + Create_Watch_Tables(_db_client, parm(1)) + Create_Watch_Tables(_db_server, parm(1)) + Drop_Triggers(_db_client, parm(1), "mpsync_update|mpsync_watch") + If _db_direction <> 1 Then + Create_Watch_Triggers(_db_client, parm(1)) + End If + ElseIf parm(0) = "DROP" Then + Drop_Watch_Tables(_db_client, parm(1)) + Drop_Triggers(_db_client, parm(1), "mpsync_update|mpsync_watch") End If - ElseIf parm(0) = "DROP" Then - Drop_Watch_Tables(_db_client, parm(1)) - Drop_Triggers(_db_client, parm(1), "mpsync_update|mpsync_watch") - End If - bw_threads -= 1 - bw_dbs.RemoveAt(bw_dbs.LastIndexOf(parm(1))) + bw_threads -= 1 + bw_dbs.RemoveAt(bw_dbs.LastIndexOf(parm(1))) - logStats("MPSync: [checkTriggers][bw_watchtriggers_worker] Background watch trigger thread on database " & parm(1) & " for " & parm(0) & " complete.", "DEBUG") + logStats("MPSync: [checkTriggers][bw_watchtriggers_worker] Background watch trigger thread on database " & parm(1) & " for " & parm(0) & " complete.", MessageType.DEBUG) + + Catch ex As Exception + logStats("MPSync: [checkTriggers][bw_watchtriggers_worker] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub Private Sub bw_worktriggers_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) - Dim parm() As String = Split(e.Argument, "|") + Try + + Dim parm() As String = Split(e.Argument, "|") - logStats("MPSync: [checkTriggers][bw_worktriggers_worker] Background work trigger thread on database " & parm(1) & " started.", "DEBUG") + logStats("MPSync: [checkTriggers][bw_worktriggers_worker] Background work trigger thread on database " & parm(1) & " started.", MessageType.DEBUG) - If parm(0) = "DROP" Then Drop_Triggers(IO.Path.GetDirectoryName(parm(1)) & "\", IO.Path.GetFileName(parm(1)), "mpsync_work") - If parm(0) = "ADD" Then Create_Sync_Triggers(parm(1)) + If parm(0) = "DROP" Then Drop_Triggers(IO.Path.GetDirectoryName(parm(1)) & "\", IO.Path.GetFileName(parm(1)), "mpsync_work") + If parm(0) = "ADD" Then Create_Sync_Triggers(parm(1)) - bw_threads -= 1 - bw_dbs.RemoveAt(bw_dbs.LastIndexOf(parm(1))) + bw_threads -= 1 + bw_dbs.RemoveAt(bw_dbs.LastIndexOf(parm(1))) - logStats("MPSync: [checkTriggers][bw_worktriggers_worker] Background work trigger thread on database " & parm(1) & " complete.", "DEBUG") + logStats("MPSync: [checkTriggers][bw_worktriggers_worker] Background work trigger thread on database " & parm(1) & " complete.", MessageType.DEBUG) + + Catch ex As Exception + logStats("MPSync: [checkTriggers][bw_worktriggers_worker] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub @@ -902,7 +940,7 @@ Public Class MPSync_process If Not IO.File.Exists(path & database) Then Exit Sub - logStats("MPSync: [Create_Watch_Tables] Creating/altering watch table mpsync in database " & path & database, "DEBUG") + logStats("MPSync: [Create_Watch_Tables] Creating/altering watch table mpsync in database " & path & database, MessageType.DEBUG) Dim SQL As String = Nothing @@ -911,22 +949,22 @@ Public Class MPSync_process Select Case database Case mps.i_watched(0).database - SQL = "CREATE TABLE IF NOT EXISTS mpsync " & _ - "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, id INTEGER, user TEXT, " & _ - "user_rating TEXT, watched INTEGER, resume_part INTEGER, resume_time INTEGER, resume_data TEXT, alternatecovers TEXT, coverfullpath TEXT, " & _ + SQL = "CREATE TABLE IF NOT EXISTS mpsync " & + "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, id INTEGER, user TEXT, " & + "user_rating TEXT, watched INTEGER, resume_part INTEGER, resume_time INTEGER, resume_data TEXT, alternatecovers TEXT, coverfullpath TEXT, " & "coverthumbfullpath TEXT)" Case mps.i_watched(1).database - SQL = "CREATE TABLE IF NOT EXISTS mpsync (mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, " & _ + SQL = "CREATE TABLE IF NOT EXISTS mpsync (mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, " & "idTrack INTEGER, iResumeAt INTEGER, dateLastPlayed TEXT)" Case mps.i_watched(2).database - SQL = "CREATE TABLE IF NOT EXISTS mpsync " & _ - "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, CompositeID TEXT, id INTEGER, " & _ - "EpisodeFilename TEXT, watched INTEGER, myRating TEXT, StopTime TEXT, DateWatched TEXT, WatchedFileTimeStamp INTEGER, " & _ + SQL = "CREATE TABLE IF NOT EXISTS mpsync " & + "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, CompositeID TEXT, id INTEGER, " & + "EpisodeFilename TEXT, watched INTEGER, myRating TEXT, StopTime TEXT, DateWatched TEXT, WatchedFileTimeStamp INTEGER, " & "UnwatchedItems INTEGER, EpisodesUnWatched INTEGER)" Case mps.i_watched(3).database - SQL = "CREATE TABLE IF NOT EXISTS mpsync " & _ - "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, idMovie INTEGER, watched BOOL, " & _ - "timeswatched INTEGER, iwatchedPercent INTEGER, idResume INTEGER, idFile INTEGER, stoptime INTEGER, resumeData BLOOB, idBookmark INTEGER, " & _ + SQL = "CREATE TABLE IF NOT EXISTS mpsync " & + "(mps_id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, mps_lastupdated TEXT, mps_session TEXT, idMovie INTEGER, watched BOOL, " & + "timeswatched INTEGER, iwatchedPercent INTEGER, idResume INTEGER, idFile INTEGER, stoptime INTEGER, resumeData BLOOB, idBookmark INTEGER, " & "fPercentage TEXT)" End Select @@ -979,24 +1017,23 @@ Public Class MPSync_process If SQL <> Nothing Then - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Try - SQLconnect.Open() - SQLcommand.CommandText = SQL - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - logStats("MPSync: [Create_Watch_Tables] Error executing '" & SQLcommand.CommandText & "' on database " & database, "ERROR") - End Try + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + Try + SQLconnect.Open() + SQLcommand.CommandText = SQL + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + logStats("MPSync: [Create_Watch_Tables] Error executing '" & SQLcommand.CommandText & "' on database " & database, MessageType.ERR) + End Try - SQLconnect.Close() + End Using End If - logStats("MPSync: [Create_Watch_Tables] Watch table mpsync in database " & path & database & " created/altered.", "DEBUG") + logStats("MPSync: [Create_Watch_Tables] Watch table mpsync in database " & path & database & " created/altered.", MessageType.DEBUG) End Sub @@ -1004,24 +1041,23 @@ Public Class MPSync_process If Not IO.File.Exists(path & database) Then Exit Sub - logStats("MPSync: [Drop_Watch_Tables] Drop watch table mpsync from database " & path & database, "DEBUG") + logStats("MPSync: [Drop_Watch_Tables] Drop watch table mpsync from database " & path & database, MessageType.DEBUG) - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) - - Try - SQLconnect.Open() - SQLcommand.CommandText = "DROP TABLE IF EXISTS mpsync" - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - logStats("MPSync: [Drop_Watch_Tables] Error executing '" & SQLcommand.CommandText & "' from database " & path & database, "ERROR") - End Try + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + Try + SQLconnect.Open() + SQLcommand.CommandText = "DROP TABLE IF EXISTS mpsync" + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + logStats("MPSync: [Drop_Watch_Tables] Error executing '" & SQLcommand.CommandText & "' from database " & path & database, MessageType.ERR) + End Try - SQLconnect.Close() + End Using - logStats("MPSync: [Drop_Watch_Tables] Watch table mpsync from database " & path & database & " dropped.", "DEBUG") + logStats("MPSync: [Drop_Watch_Tables] Watch table mpsync from database " & path & database & " dropped.", MessageType.DEBUG) End Sub @@ -1029,7 +1065,7 @@ Public Class MPSync_process If Not IO.File.Exists(path & database) Then Exit Sub - logStats("MPSync: [Create_Watch_Triggers] Creating watch triggers in database " & path & database, "DEBUG") + logStats("MPSync: [Create_Watch_Triggers] Creating watch triggers in database " & path & database, MessageType.DEBUG) Dim SQL As String = Nothing Dim tables() As String = Nothing @@ -1107,12 +1143,12 @@ Public Class MPSync_process If tblflds <> Nothing Then newflds = FieldList(path, database, tables(x), fields(x).names, "new.") - SQL = SQL & "CREATE TRIGGER IF NOT EXISTS mpsync_watch_" & tables(x) & " " & _ - "AFTER UPDATE OF " & tblflds & " ON " & tables(x) & " " & _ - "BEGIN " & _ - "DELETE FROM mpsync WHERE tablename='" & tables(x) & "' AND mps_session='" & session & "' AND " & keys(x) & "=new." & keys(x) & "; " & _ - "INSERT OR REPLACE INTO mpsync(tablename,mps_lastupdated,mps_session," & tblflds & ") " & _ - "VALUES('" & tables(x) & "',datetime('now','localtime'),'" & session & "'," & newflds & "); " & _ + SQL = SQL & "CREATE TRIGGER IF NOT EXISTS mpsync_watch_" & tables(x) & " " & + "AFTER UPDATE OF " & tblflds & " ON " & tables(x) & " " & + "BEGIN " & + "DELETE FROM mpsync WHERE tablename='" & tables(x) & "' AND mps_session='" & session & "' AND " & keys(x) & "=new." & keys(x) & "; " & + "INSERT OR REPLACE INTO mpsync(tablename,mps_lastupdated,mps_session," & tblflds & ") " & + "VALUES('" & tables(x) & "',datetime('now','localtime'),'" & session & "'," & newflds & "); " & "END; " End If End If @@ -1121,24 +1157,22 @@ Public Class MPSync_process If SQL <> Nothing Then - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) - - Try - SQLconnect.Open() - SQLcommand.CommandText = SQL - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - logStats("MPSync: [Create_Watch_Triggers] Error executing '" & SQLcommand.CommandText & " on database " & path & database, "ERROR") - End Try + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.Close() + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + Try + SQLconnect.Open() + SQLcommand.CommandText = SQL + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + logStats("MPSync: [Create_Watch_Triggers] Error executing '" & SQLcommand.CommandText & " on database " & path & database, MessageType.ERR) + End Try + End Using End If - logStats("MPSync: [Create_Watch_Triggers] Watch triggers in database " & path & database & " created.", "DEBUG") + logStats("MPSync: [Create_Watch_Triggers] Watch triggers in database " & path & database & " created.", MessageType.DEBUG) End Sub @@ -1146,46 +1180,44 @@ Public Class MPSync_process If Not IO.File.Exists(path & database) Then Exit Sub - logStats("MPSync: [Drop_Triggers] Drop triggers in database " & path & database, "DEBUG") + logStats("MPSync: [Drop_Triggers] Drop triggers in database " & path & database, MessageType.DEBUG) Dim SQL As String = Nothing Dim pattern() As String = Split(searchpattern, "|") - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader - - Try - SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) - SQLconnect.Open() + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - If table = Nothing Then - SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='trigger'" - Else - SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='trigger' and tbl_name='" & table & "'" - End If + Try + SQLconnect.ConnectionString = "Data Source=" & p_Database(path & database) + SQLconnect.Open() - SQLreader = SQLcommand.ExecuteReader() + If table = Nothing Then + SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='trigger'" + Else + SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='trigger' and tbl_name='" & table & "'" + End If - While SQLreader.Read() - For x As Integer = 0 To UBound(pattern) - If Left(SQLreader(0), Len(pattern(x))) = pattern(x) Then SQL = SQL & "DROP TRIGGER " & SQLreader(0) & "; " - Next - End While + Using SQLreader = SQLcommand.ExecuteReader() - SQLreader.Close() + While SQLreader.Read() + For x As Integer = 0 To UBound(pattern) + If Left(SQLreader.GetString(0), Len(pattern(x))) = pattern(x) Then SQL = SQL & "DROP TRIGGER " & SQLreader.GetString(0) & "; " + Next + End While + End Using - If SQL <> Nothing Then - SQLcommand.CommandText = SQL - SQLcommand.ExecuteNonQuery() - End If - Catch ex As Exception - logStats("MPSync: [Drop_Triggers] Error executing '" & SQLcommand.CommandText & "' on database " & path & database, "ERROR") - End Try + If SQL <> Nothing Then + SQLcommand.CommandText = SQL + SQLcommand.ExecuteNonQuery() + End If + Catch ex As Exception + logStats("MPSync: [Drop_Triggers] Error executing '" & SQLcommand.CommandText & "' on database " & path & database, MessageType.ERR) + End Try - SQLconnect.Close() + End Using - logStats("MPSync: [Drop_Triggers] Triggers in database " & path & database & " dropped.", "DEBUG") + logStats("MPSync: [Drop_Triggers] Triggers in database " & path & database & " dropped.", MessageType.DEBUG) End Sub @@ -1193,7 +1225,7 @@ Public Class MPSync_process If Not IO.File.Exists(database) Then Exit Sub - logStats("MPSync: [Create_Sync_Triggers] Check synchronization triggers in database " & database, "DEBUG") + logStats("MPSync: [Create_Sync_Triggers] Check synchronization triggers in database " & database, MessageType.DEBUG) Dim x As Integer = -1 Dim table() As String = Nothing @@ -1202,140 +1234,137 @@ Public Class MPSync_process Dim d_SQL, u_SQL, i_SQL As String Dim omit As Array = {"mpsync", "mpsync_trigger", "sqlite_sequence", "sqlite_stat1", "sqlite_stat2"} - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & p_Database(database) - SQLconnect.Open() - SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table'" - SQLreader = SQLcommand.ExecuteReader() - - While SQLreader.Read() + SQLconnect.ConnectionString = "Data Source=" & p_Database(database) + SQLconnect.Open() + SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table'" + Using SQLreader = SQLcommand.ExecuteReader() + While SQLreader.Read() - If Array.IndexOf(omit, SQLreader(0)) = -1 Then - x += 1 - ReDim Preserve table(x) - table(x) = SQLreader(0) - End If + If Array.IndexOf(omit, SQLreader(0)) = -1 Then + x += 1 + ReDim Preserve table(x) + table(x) = SQLreader.GetString(0) + End If - End While + End While + End Using - SQLreader.Close() + If x = -1 Then + ReDim Preserve table(0) + table(0) = Nothing + End If - If x = -1 Then - ReDim Preserve table(0) - table(0) = Nothing - End If + SQLcommand.CommandText = "SELECT sql FROM sqlite_master WHERE type='trigger'" + Using SQLreader = SQLcommand.ExecuteReader() + x = -1 - SQLcommand.CommandText = "SELECT sql FROM sqlite_master WHERE type='trigger'" - SQLreader = SQLcommand.ExecuteReader() + While SQLreader.Read() - x = -1 + If Array.IndexOf(omit, SQLreader(0)) = -1 Then + x += 1 + ReDim Preserve trigger(x) + trigger(x) = SQLreader.GetString(0) + End If - While SQLreader.Read() + End While + End Using - If Array.IndexOf(omit, SQLreader(0)) = -1 Then - x += 1 - ReDim Preserve trigger(x) - trigger(x) = SQLreader(0) + If x = -1 Then + ReDim Preserve trigger(0) + trigger(0) = Nothing End If - End While - - SQLreader.Close() - - If x = -1 Then - ReDim Preserve trigger(0) - trigger(0) = Nothing - End If - - If TableExist(IO.Path.GetDirectoryName(database) & "\", IO.Path.GetFileName(database), "mpsync_trigger", True) = False Then + If TableExist(IO.Path.GetDirectoryName(database) & "\", IO.Path.GetFileName(database), "mpsync_trigger", True) = False Then - logStats("MPSync: [Create_Sync_Triggers] Creating work table mpsync_trigger in database " & database, "LOG") + logStats("MPSync: [Create_Sync_Triggers] Creating work table mpsync_trigger in database " & database, MessageType.LOG) - Try - SQLcommand.CommandText = "CREATE TABLE IF NOT EXISTS mpsync_trigger (id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, lastupdated TEXT)" - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - logStats("MPSync: [Create_Sync_Triggers] Error executing '" & SQLcommand.CommandText & " on database " & database, "ERROR") - End Try + Try + SQLcommand.CommandText = "CREATE TABLE IF NOT EXISTS mpsync_trigger (id INTEGER PRIMARY KEY AUTOINCREMENT, tablename TEXT, lastupdated TEXT)" + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + logStats("MPSync: [Create_Sync_Triggers] Error executing '" & SQLcommand.CommandText & " on database " & database, MessageType.ERR) + End Try - End If + End If - For x = 0 To UBound(table) + For x = 0 To UBound(table) - u_SQL = "CREATE TRIGGER mpsync_work_u_" & table(x) & " " & _ - "AFTER UPDATE ON " & table(x) & " " & _ - "BEGIN " & _ - "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & _ - "INSERT INTO mpsync_trigger(tablename,lastupdated) " & _ - "SELECT '" & table(x) & "',datetime('now','localtime') " & _ - "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & _ + u_SQL = "CREATE TRIGGER mpsync_work_u_" & table(x) & " " & + "AFTER UPDATE ON " & table(x) & " " & + "BEGIN " & + "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & + "INSERT INTO mpsync_trigger(tablename,lastupdated) " & + "SELECT '" & table(x) & "',datetime('now','localtime') " & + "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & "END" - i_SQL = "CREATE TRIGGER mpsync_work_i_" & table(x) & " " & _ - "AFTER INSERT ON " & table(x) & " " & _ - "BEGIN " & _ - "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & _ - "INSERT INTO mpsync_trigger(tablename,lastupdated) " & _ - "SELECT '" & table(x) & "',datetime('now','localtime') " & _ - "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & _ + i_SQL = "CREATE TRIGGER mpsync_work_i_" & table(x) & " " & + "AFTER INSERT ON " & table(x) & " " & + "BEGIN " & + "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & + "INSERT INTO mpsync_trigger(tablename,lastupdated) " & + "SELECT '" & table(x) & "',datetime('now','localtime') " & + "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & "END" - d_SQL = "CREATE TRIGGER mpsync_work_d_" & table(x) & " " & _ - "AFTER DELETE ON " & table(x) & " " & _ - "BEGIN " & _ - "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & _ - "INSERT INTO mpsync_trigger(tablename,lastupdated) " & _ - "SELECT '" & table(x) & "',datetime('now','localtime') " & _ - "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & _ + d_SQL = "CREATE TRIGGER mpsync_work_d_" & table(x) & " " & + "AFTER DELETE ON " & table(x) & " " & + "BEGIN " & + "UPDATE mpsync_trigger SET lastupdated=datetime('now','localtime') WHERE tablename='" & table(x) & "'; " & + "INSERT INTO mpsync_trigger(tablename,lastupdated) " & + "SELECT '" & table(x) & "',datetime('now','localtime') " & + "WHERE NOT EXISTS (SELECT 1 FROM mpsync_trigger WHERE tablename = '" & table(x) & "' LIMIT 1); " & "END" - If trigger.Contains(u_SQL) And trigger.Contains(i_SQL) And trigger.Contains(d_SQL) Then - u_SQL = Nothing - i_SQL = Nothing - d_SQL = Nothing - Else - u_SQL = u_SQL & "; " - i_SQL = i_SQL & "; " - d_SQL = d_SQL & "; " - End If + If trigger.Contains(u_SQL) And trigger.Contains(i_SQL) And trigger.Contains(d_SQL) Then + u_SQL = Nothing + i_SQL = Nothing + d_SQL = Nothing + Else + u_SQL = u_SQL & "; " + i_SQL = i_SQL & "; " + d_SQL = d_SQL & "; " + End If - ReDim Preserve SQL(x) - SQL(x) = u_SQL & i_SQL & d_SQL + ReDim Preserve SQL(x) + SQL(x) = u_SQL & i_SQL & d_SQL - Next + Next - SQLconnect.Close() + End Using For x = 0 To UBound(SQL) If SQL(x) <> Nothing Then Drop_Triggers(IO.Path.GetDirectoryName(database) & "\", IO.Path.GetFileName(database), "mpsync_work", table(x)) Next - Try - SQLconnect.ConnectionString = "Data Source=" & p_Database(database) - SQLconnect.Open() + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Try - For x = 0 To UBound(SQL) + SQLconnect.ConnectionString = "Data Source=" & p_Database(database) + SQLconnect.Open() - If SQL(x) <> Nothing Then + For x = 0 To UBound(SQL) - logStats("MPSync: [Create_Sync_Triggers] Creating synchronization triggers on table " & table(x) & " in database " & database, "LOG") + If SQL(x) <> Nothing Then - SQLcommand.CommandText = SQL(x) - SQLcommand.ExecuteNonQuery() + logStats("MPSync: [Create_Sync_Triggers] Creating synchronization triggers on table " & table(x) & " in database " & database, MessageType.LOG) - End If + SQLcommand.CommandText = SQL(x) + SQLcommand.ExecuteNonQuery() - Next - Catch ex As Exception - logStats("MPSync: [Create_Sync_Triggers] Error executing '" & SQLcommand.CommandText & " on table " & table(x) & " in database " & database & " with exception: " & ex.Message, "ERROR") - End Try + End If - SQLconnect.Close() + Next + Catch ex As Exception + logStats("MPSync: [Create_Sync_Triggers] Error executing '" & SQLcommand.CommandText & " on table " & table(x) & " in database " & database & " with exception: " & ex.Message, MessageType.ERR) + End Try + End Using - logStats("MPSync: [Create_Sync_Triggers] Synchronization triggers in database " & database & " checked.", "DEBUG") + logStats("MPSync: [Create_Sync_Triggers] Synchronization triggers in database " & database & " checked.", MessageType.DEBUG) End Sub diff --git a/MPSync/MPSync/MPSync_process_DB.vb b/MPSync/MPSync/MPSync_process_DB.vb index 466d156..298f87c 100644 --- a/MPSync/MPSync/MPSync_process_DB.vb +++ b/MPSync/MPSync/MPSync_process_DB.vb @@ -1,7 +1,4 @@ -Imports MediaPortal.Configuration -Imports MediaPortal.GUI.Library - -Imports System.ComponentModel +Imports System.ComponentModel Imports System.Data.SQLite Public Class MPSync_process_DB @@ -12,15 +9,42 @@ Public Class MPSync_process_DB Dim bw_dbs As New ArrayList Dim bw_sync_db() As BackgroundWorker + Public Structure ColumnInfo + Public name As String + Public type As String + Public dflt_value As String + Public pk As Boolean + Public notNull As Boolean + Public Overrides Function ToString() As String + Return String.Format("[{0}:{1}]", name, type) + End Function + End Structure + + Public Class TableInfo + Public source As String + Public target As String + Public database As String + Public name As String + Public Sub New(asource As String, atarget As String, adatabase As String, aname As String) + source = asource + target = atarget + database = adatabase + name = aname + End Sub + End Class + Public Class SyncDbParams + Public tables As List(Of TableInfo) + End Class + Private ReadOnly Property p_Session As String Get Dim session As String = Nothing Try - Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) session = XMLreader.GetValueAsString("Plugin", "session ID", Nothing) End Using Catch ex As Exception - MPSync_process.logStats("MPSync: Error reading 'session' value from XML with exception " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: Error reading 'session' value from XML with exception " & ex.Message, MessageType.ERR) End Try Return session End Get @@ -30,106 +54,112 @@ Public Class MPSync_process_DB Get Dim lastsync As String = "0001-01-01 00:00:00" Try - Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) lastsync = XMLreader.GetValueAsString("Plugin", "last sync", "0001-01-01 00:00:00") End Using Catch ex As Exception - MPSync_process.logStats("MPSync: Error reading 'last sync' value from XML with exception " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: Error reading 'last sync' value from XML with exception " & ex.Message, MessageType.ERR) End Try Return lastsync End Get Set(value As String) Try - Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) XMLwriter.SetValue("Plugin", "last sync", value) End Using MediaPortal.Profile.Settings.SaveCache() Catch ex As Exception - MPSync_process.logStats("MPSync: Error writing 'last sync' value in XML with exception " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: Error writing 'last sync' value in XML with exception " & ex.Message, MessageType.ERR) End Try End Set End Property - Public Function LoadTable(ByVal path As String, ByVal database As String, ByVal table As String, Optional ByRef columns As Array = Nothing, Optional ByVal where As String = Nothing, Optional ByVal order As String = Nothing) As Array + Public Function LoadTable(ByVal path As String, ByVal database As String, ByVal table As String, Optional ByRef columns As List(Of ColumnInfo) = Nothing, Optional ByVal where As String = Nothing, Optional ByVal order As String = Nothing) As Array + + MPSync_process.logStats("MPSync: [LoadTable] Load values from table " & table & " in database " & path & database, MessageType.DEBUG) - MPSync_process.logStats("MPSync: [LoadTable] Load values from table " & table & " in database " & path & database, "DEBUG") + If columns Is Nothing Then columns = New List(Of ColumnInfo) Dim x, y, z, records As Integer Dim fields As String = "*" Dim data(,) As String = Nothing - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader = Nothing - - Try - - If columns Is Nothing Then - columns = getFields(path, database, table) - Else - fields = getSelectFields(columns) - End If - - z = getPK(columns) - records = RecordCount(path, database, table, where) + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" - SQLconnect.Open() + Try - If records > 0 Then + If columns.Count = 0 Then + columns = getFields(path, database, table) + Else + fields = getSelectFields(columns) + End If - SQLcommand.CommandText = "SELECT rowid, " & fields & " FROM " & table + z = getPK(columns) + records = RecordCount(path, database, table, where) - If where <> Nothing Then - SQLcommand.CommandText &= " WHERE " & where - End If + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" + SQLconnect.Open() - If order <> Nothing Then - SQLcommand.CommandText &= " ORDER BY " & order - End If + If records > 0 Then - SQLreader = SQLcommand.ExecuteReader() + SQLcommand.CommandText = "SELECT rowid, " & fields & " FROM " & table - ReDim Preserve data(2, records - 1) + If where <> Nothing Then + SQLcommand.CommandText &= " WHERE " & where + End If - While SQLreader.Read() + If order <> Nothing Then + SQLcommand.CommandText &= " ORDER BY " & order + End If - data(0, x) = SQLreader(0) - - For y = 0 To UBound(columns, 2) - If Not IsDBNull(SQLreader(y + 1)) Then - Select Case columns(1, y) - Case "INTEGER", "REAL", "BLOB" - data(1, x) &= SQLreader(y + 1).ToString.Replace(",", ".") & dlm - If y = z Then data(2, x) = SQLreader(y + 1).ToString - Case "TIMESTAMP" - data(1, x) &= Format(SQLreader(y + 1), "yyyy-MM-dd HH:mm:ss") & dlm - If y = z Then data(2, x) = Format(SQLreader(y + 1), "yyyy-MM-dd HH:mm:ss") - Case Else - data(1, x) &= SQLreader(y + 1) & dlm - If y = z Then data(2, x) = SQLreader(y + 1) - End Select - Else - data(1, x) &= "NULL" & dlm - If y = z Then data(2, x) = "NULL" - End If - Next + Using SQLreader = SQLcommand.ExecuteReader() - x += 1 + ReDim Preserve data(2, records - 1) + Try - End While + While SQLreader.Read() + + data(0, x) = SQLreader.GetString(0) + + For y = 0 To columns.Count - 1 + If Not IsDBNull(SQLreader(y + 1)) Then + Select Case columns(y).type + Case "INTEGER", "REAL", "BLOB" + data(1, x) &= SQLreader(y + 1).ToString.Replace(",", ".") & dlm + If y = z Then data(2, x) = SQLreader(y + 1).ToString + Case "TIMESTAMP" + data(1, x) &= Format(SQLreader(y + 1), "yyyy-MM-dd HH:mm:ss") & dlm + If y = z Then data(2, x) = Format(SQLreader(y + 1), "yyyy-MM-dd HH:mm:ss") + Case Else + data(1, x) &= SQLreader.GetString(y + 1) & dlm + If y = z Then data(2, x) = SQLreader.GetString(y + 1) + End Select + Else + data(1, x) &= "NULL" & dlm + If y = z Then data(2, x) = "NULL" + End If + Next + + x += 1 + + End While + Catch ex As Exception + MPSync_process.logStats("MPSync: Error reading table " & table & " rowid """ & SQLreader.GetString(0) & """ in " & database & " with exception: " & ex.Message, MessageType.DEBUG) + Throw + End Try - Else - ReDim data(2, 0) - End If + End Using + Else + ReDim data(2, 0) + End If - Catch ex As Exception - MPSync_process.logStats("MPSync: Error reading table " & table & " rowid """ & SQLreader(0) & """ in " & database & " with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: Error reading data from table " & table & " in database " & database, "ERROR") - data = Nothing - End Try + Catch ex As Exception + MPSync_process.logStats("MPSync: Error reading data from table " & table & " in database " & database, MessageType.ERR) + data = Nothing + End Try - SQLconnect.Close() + End Using Return data @@ -137,7 +167,7 @@ Public Class MPSync_process_DB Public Function FormatValue(ByVal value As Object, ByVal type As String) As String - 'MPSync_process.logStats("MPSync: [FormatValue]", "DEBUG") + 'MPSync_process.logStats("MPSync: [FormatValue]", MessageType.DEBUG) Dim fmtvalue As String @@ -160,9 +190,9 @@ Public Class MPSync_process_DB End Function - Private Function BuildUpdateArray_mpsync(ByVal w_values(,) As String, ByVal s_data As Array, ByVal mps_columns As Array, ByVal columns As Array) As Array + Private Function BuildUpdateArray_mpsync(ByVal w_values(,) As String, ByVal s_data As Array, ByVal mps_columns As List(Of ColumnInfo), ByVal columns As List(Of ColumnInfo)) As Array - 'MPSync_process.logStats("MPSync: [BuildUpdateArray_mpsync]", "DEBUG") + 'MPSync_process.logStats("MPSync: [BuildUpdateArray_mpsync]", MessageType.DEBUG) Dim x, z As Integer Dim w_pk(), s_pk() As String @@ -197,88 +227,49 @@ Public Class MPSync_process_DB End Function - Public Function BuildUpdateArray(ByVal s_data As Array, ByVal t_data As Array, ByVal columns As Array) As Array - - 'MPSync_process.logStats("MPSync: [BuildUpdateArray]", "DEBUG") - - Dim x As Integer = getPK(columns) - - If x = -1 Then Return Nothing - - Dim w_values(,) As String = Nothing - Dim s_temp(), t_temp() As String - Dim same As IEnumerable(Of String) - - If x <> -1 Then - s_temp = getArray(s_data, 2) - t_temp = getArray(t_data, 2) - Else - s_temp = getArray(s_data, 1) - t_temp = getArray(t_data, 1) - End If - - If s_temp(0) <> Nothing Then - - Dim y, z As Integer + Public Function getFields(ByVal path As String, ByVal database As String, ByVal table As String) As List(Of ColumnInfo) - same = s_temp.Intersect(t_temp) + 'MPSync_process.logStats("MPSync: [getFields]", MessageType.DEBUG) - ReDim w_values(UBound(s_data, 1), UBound(same.ToArray)) + Dim columns As List(Of ColumnInfo) = New List(Of ColumnInfo) - For x = 0 To UBound(same.ToArray) - y = Array.IndexOf(s_temp, same.ToArray(x)) - For z = 0 To UBound(s_data, 1) - w_values(z, x) = s_data(z, y) - Next - Next - - End If - - Return w_values - - End Function - - Public Function getFields(ByVal path As String, ByVal database As String, ByVal table As String) As Array - - 'MPSync_process.logStats("MPSync: [getFields]", "DEBUG") - - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader - Dim columns(,) As String = Nothing - Dim x As Integer = 0 + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Dim x As Integer = 0 - Try - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" - SQLconnect.Open() - SQLcommand.CommandText = "PRAGMA table_info (" & table & ")" - SQLreader = SQLcommand.ExecuteReader() - - While SQLreader.Read() - ReDim Preserve columns(3, x) - columns(0, x) = LCase(SQLreader(1)) - columns(1, x) = UCase(SQLreader(2)) - If Not IsDBNull(SQLreader(4)) Then columns(2, x) = SQLreader(4).ToString.Replace("'", "") - columns(3, x) = SQLreader(5) - x += 1 - End While - Catch ex As Exception - End Try + Try + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" + SQLconnect.Open() + SQLcommand.CommandText = "PRAGMA table_info (" & table & ")" + Using SQLreader = SQLcommand.ExecuteReader() + While SQLreader.Read() + Dim t As ColumnInfo = New ColumnInfo + t.name = LCase(SQLreader.GetString(1)) + t.type = UCase(SQLreader.GetString(2)) + t.notNull = SQLreader.GetBoolean(3) + If Not IsDBNull(SQLreader(4)) Then t.dflt_value = SQLreader.GetString(4).Replace("'", "") + t.pk = SQLreader.GetBoolean(5) + columns.Add(t) + End While + End Using + Catch ex As Exception + MPSync_process.logStats("MPSync: Error getFields " & table & " in " & database & " with exception: " & ex.Message, MessageType.DEBUG) + End Try - SQLconnect.Close() + End Using Return columns End Function - Private Function getSelectFields(ByVal columns As Array) As String + Private Function getSelectFields(ByVal columns As List(Of ColumnInfo)) As String - 'MPSync_process.logStats("MPSync: [getSelectFields]", "DEBUG") + 'MPSync_process.logStats("MPSync: [getSelectFields]", MessageType.DEBUG) Dim fields As String = Nothing - For x = 0 To UBound(columns, 2) - fields &= columns(0, x) & "," + For x = 0 To columns.Count - 1 + fields &= columns(x).name & "," Next Return Left(fields, Len(fields) - 1) @@ -287,40 +278,40 @@ Public Class MPSync_process_DB Private Function RecordCount(ByVal path As String, ByVal database As String, ByVal table As String, Optional ByVal where As String = Nothing) As Integer - MPSync_process.logStats("MPSync: [RecordCount] Get number of records for table " & table & " in database " & path & database, "DEBUG") + MPSync_process.logStats("MPSync: [RecordCount] Get number of records for table " & table & " in database " & path & database, MessageType.DEBUG) - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader Dim x As Integer + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Try + Try - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" - SQLconnect.Open() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" + SQLconnect.Open() - If where = Nothing Then - SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table - Else - SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table & " WHERE " & where - End If + If where = Nothing Then + SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table + Else + SQLcommand.CommandText = "SELECT COUNT(*) FROM " & table & " WHERE " & where + End If - SQLreader = SQLcommand.ExecuteReader() - SQLreader.Read() - x = Int(SQLreader(0)) - Catch ex As Exception - x = 0 - End Try + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + x = SQLreader.GetInt32(0) + End Using + Catch ex As Exception + x = 0 + End Try - SQLconnect.Close() + End Using Return x End Function - Public Function getPkValues(ByVal values As Array, ByVal mps_columns As Array, ByVal columns As Array) As Array + Public Function getPkValues(ByVal values As Array, ByVal mps_columns As List(Of ColumnInfo), ByVal columns As List(Of ColumnInfo)) As String() - 'MPSync_process.logStats("MPSync: [getPkValues]", "DEBUG") + 'MPSync_process.logStats("MPSync: [getPkValues]", MessageType.DEBUG) Dim x, y As Integer Dim temp2() As String @@ -330,9 +321,9 @@ Public Class MPSync_process_DB If x = -1 Then Return Nothing - Dim mps_cols As Array = getArray(mps_columns, 0) + Dim mps_cols As String() = mps_columns.Select(Function(m) m.name).ToArray - x = Array.IndexOf(mps_cols, columns(0, x)) + x = Array.IndexOf(mps_cols, columns(x).name) Dim temp1 As Array = getArray(values, 1) @@ -350,17 +341,17 @@ Public Class MPSync_process_DB End Function - Public Function getPK(ByVal columns As Array, Optional ByRef pkey As String = Nothing) As Integer - - 'MPSync_process.logStats("MPSync: [getPK]", "DEBUG") + Public Function getPK(ByVal columns As List(Of ColumnInfo), Optional ByRef pkey As String = Nothing) As Integer - Dim x As Integer - Dim pk As Array = getArray(columns, 3) + 'MPSync_process.logStats("MPSync: [getPK]", MessageType.DEBUG) - x = Array.IndexOf(pk, "1") + Dim x As Integer = 0 + While x < columns.Count And Not columns(x).pk + x += 1 + End While - If x <> -1 Then - pkey = columns(0, x) + If x < columns.Count Then + pkey = columns(x).name Return x Else pkey = Nothing @@ -371,7 +362,7 @@ Public Class MPSync_process_DB Public Function getLastUpdateDate(ByVal values As String, ByVal index As Integer) As String - 'MPSync_process.logStats("MPSync: [getLastUpdateDate]", "DEBUG") + 'MPSync_process.logStats("MPSync: [getLastUpdateDate]", MessageType.DEBUG) Dim a_values() As String = Split(values, dlm) @@ -381,7 +372,7 @@ Public Class MPSync_process_DB Public Function getArray(ByVal array As Array, ByVal dimension As Integer) As Array - 'MPSync_process.logStats("MPSync: [getArray]", "DEBUG") + 'MPSync_process.logStats("MPSync: [getArray]", MessageType.DEBUG) If array Is Nothing Then Return Nothing @@ -400,47 +391,48 @@ Public Class MPSync_process_DB End Function - Public Function getCurrentTableValues(ByVal path As String, ByVal database As String, ByVal table As String, ByVal columns As Array, ByVal mps_cols As Array, ByVal pkey As String, ByVal fields As String, ByVal where As String) As Array + Public Function getCurrentTableValues(ByVal path As String, ByVal database As String, ByVal table As String, ByVal columns As List(Of ColumnInfo), ByVal mps_cols As Array, ByVal pkey As String, ByVal fields As String, ByVal where As String) As Array - MPSync_process.logStats("MPSync: [getCurrentTableValues] Get current table values from " & table & " in database " & path & database, "DEBUG") + MPSync_process.logStats("MPSync: [getCurrentTableValues] Get current table values from " & table & " in database " & path & database, MessageType.DEBUG) Dim records As Integer = RecordCount(path, database, table, where) If records > 0 Then - MPSync_process.logStats("MPSync: [getCurrentTableValues] Load current table values from " & table & " in database " & path & database, "DEBUG") + MPSync_process.logStats("MPSync: [getCurrentTableValues] Load current table values from " & table & " in database " & path & database, MessageType.DEBUG) - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader - - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" - SQLconnect.Open() - SQLcommand.CommandText = "SELECT " & fields & " FROM " & table & " WHERE " & where - SQLreader = SQLcommand.ExecuteReader() - SQLreader.Read() - - Dim i, x, z As Integer Dim curvalues() As String - curvalues = Nothing + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - For x = 0 To UBound(columns, 2) - z = Array.IndexOf(mps_cols, columns(0, x)) - If z <> -1 Then - If columns(0, x) <> pkey Then - ReDim Preserve curvalues(i) - If Not IsDBNull(SQLreader(i)) Then - curvalues(i) = columns(0, x) & "=" & FormatValue(SQLreader(i), columns(1, x)) - Else - curvalues(i) = columns(0, x) & "=" & FormatValue("NULL", columns(1, x)) + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) & ";Read Only=True;" + SQLconnect.Open() + SQLcommand.CommandText = "SELECT " & fields & " FROM " & table & " WHERE " & where + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + + Dim i, x, z As Integer + + curvalues = Nothing + + For x = 0 To columns.Count - 1 + z = Array.IndexOf(mps_cols, columns(x).name) + If z <> -1 Then + If columns(x).name <> pkey Then + ReDim Preserve curvalues(i) + If Not IsDBNull(SQLreader(i)) Then + curvalues(i) = columns(x).name & "=" & FormatValue(SQLreader(i), columns(x).type) + Else + curvalues(i) = columns(x).name & "=" & FormatValue("NULL", columns(x).type) + End If + i += 1 + End If End If - i += 1 - End If - End If - Next + Next + End Using - SQLconnect.Close() + End Using Return curvalues @@ -450,9 +442,9 @@ Public Class MPSync_process_DB End Function - Public Function getUpdateValues(ByVal newvalues As Array, ByVal curvalues As Array) As String + Public Function getUpdateValues(ByVal newvalues As String(), ByVal curvalues As String()) As String - 'MPSync_process.logStats("MPSync: [getUpdateValues] Getting update values by comparing existing values with new ones.", "DEBUG") + 'MPSync_process.logStats("MPSync: [getUpdateValues] Getting update values by comparing existing values with new ones.", MessageType.DEBUG) Dim updvalues As String = Nothing @@ -469,56 +461,59 @@ Public Class MPSync_process_DB End Function Public Shared Sub bw_db_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) + Try + Dim mps_db As New MPSync_process_DB - Dim mps_db As New MPSync_process_DB + Do - Do + If Not MPSync_process.CheckPlayerplaying("db") Then - If Not MPSync_process.CheckPlayerplaying("db") Then + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization cycle starting.", MessageType.LOG) - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization cycle starting.", "LOG") + mps_db.bw_sync_db_jobs = 0 + Array.Resize(mps_db.bw_sync_db, 0) - mps_db.bw_sync_db_jobs = 0 - Array.Resize(mps_db.bw_sync_db, 0) + ' direction is client to server or both + If MPSync_process._db_direction <> 2 Then + mps_db.Process_DB_folder(MPSync_process._db_client, MPSync_process._db_server) + End If - ' direction is client to server or both - If MPSync_process._db_direction <> 2 Then - mps_db.Process_DB_folder(MPSync_process._db_client, MPSync_process._db_server) - End If + ' direction is server to client or both + If MPSync_process._db_direction <> 1 Then + mps_db.Process_DB_folder(MPSync_process._db_server, MPSync_process._db_client) + End If - ' direction is server to client or both - If MPSync_process._db_direction <> 1 Then - mps_db.Process_DB_folder(MPSync_process._db_server, MPSync_process._db_client) - End If + If Not MPSync_settings.syncnow Then + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization cycle complete.", MessageType.LOG) + Else + MPSync_settings.db_complete = True + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization complete.", MessageType.INFO) + Exit Do + End If + + MPSync_process.wait(MPSync_process._db_sync, , "DB") - If Not MPSync_settings.syncnow Then - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization cycle complete.", "LOG") Else - MPSync_settings.db_complete = True - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] DB synchronization complete.", "INFO") - Exit Do + MPSync_process.wait(5, False) End If - MPSync_process.wait(MPSync_process._db_sync, , "DB") - - Else - MPSync_process.wait(5, False) - End If + Loop - Loop + Catch ex As Exception + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_db_worker] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub Private Sub Process_DB_folder(ByVal source As String, ByVal target As String) If Not IO.Directory.Exists(source) Then - MPSync_process.logStats("MPSync: [Process_DB_folder] folder " & source & " does not exist", "ERROR") + MPSync_process.logStats("MPSync: [Process_DB_folder] folder " & source & " does not exist", MessageType.ERR) Exit Sub End If - MPSync_process.logStats("MPSync: [Process_DB_folder] synchronizing from " & source & " to " & target, "DEBUG") + MPSync_process.logStats("MPSync: [Process_DB_folder] synchronizing from " & source & " to " & target, MessageType.DEBUG) - On Error Resume Next Dim x As Integer Dim s_lastwrite, t_lastwrite As Date @@ -526,43 +521,48 @@ Public Class MPSync_process_DB _bw_active_db_jobs = 0 lastsync = p_lastsync - For Each database As String In IO.Directory.GetFiles(source, "*.db3") - - If Not MPSync_process.CheckPlayerplaying("db") Then - - If IO.Path.GetExtension(database) <> ".db3-journal" Then + Try - Dim db As String = IO.Path.GetFileName(database) + For Each database As String In IO.Directory.GetFiles(source, "*.db3") - If MPSync_process._databases.Contains(db) Or MPSync_process._databases.Contains("ALL") Then + If Not MPSync_process.CheckPlayerplaying("db") Then - If MPSync_process.sync_type = "Triggers" Then - ProcessTables(source, target, db) - Else + If IO.Path.GetExtension(database) <> ".db3-journal" Then - x = Array.IndexOf(MPSync_process.dbname, db) + Dim db As String = IO.Path.GetFileName(database) - s_lastwrite = My.Computer.FileSystem.GetFileInfo(database).LastWriteTimeUtc - t_lastwrite = My.Computer.FileSystem.GetFileInfo(target & db).LastWriteTimeUtc + If MPSync_process._databases.Contains(db) Or MPSync_process._databases.Contains("ALL") Then - If MPSync_process.dbinfo(x).LastWriteTimeUtc < s_lastwrite Or MPSync_process.dbinfo(x).LastWriteTimeUtc <> t_lastwrite Then + If MPSync_process.sync_type = "Triggers" Then ProcessTables(source, target, db) Else - MPSync_process.logStats("MPSync: [Process_DB_folder] no changes detected in " & database & ". Skipping synchronization.", "DEBUG") + + x = Array.IndexOf(MPSync_process.dbname, db) + + s_lastwrite = My.Computer.FileSystem.GetFileInfo(database).LastWriteTimeUtc + t_lastwrite = My.Computer.FileSystem.GetFileInfo(target & db).LastWriteTimeUtc + + If MPSync_process.dbinfo(x).LastWriteTimeUtc < s_lastwrite Or MPSync_process.dbinfo(x).LastWriteTimeUtc <> t_lastwrite Then + ProcessTables(source, target, db) + Else + MPSync_process.logStats("MPSync: [Process_DB_folder] no changes detected in " & database & ". Skipping synchronization.", MessageType.DEBUG) + End If + End If End If End If + Else + MPSync_process.logStats("MPSync: [Process_DB_folder] synchronizing from " & source & " to " & target & " aborted as player playing.", MessageType.INFO) + Exit For End If - Else - MPSync_process.logStats("MPSync: [Process_DB_folder] synchronizing from " & source & " to " & target & " aborted as player playing.", "INFO") - Exit For - End If - - Next + Next + Catch ex As Exception + MPSync_process.logStats("MPSync: [Process_DB_folder] Unexpected error " & ex.Message, MessageType.ERR) + End Try If Not MPSync_process.CheckPlayerplaying("db") Then p_lastsync = Now.ToLocalTime.ToString("yyyy-MM-dd HH:mm:ss") @@ -576,121 +576,128 @@ Public Class MPSync_process_DB If jobs = String.Empty Then Exit Do If MPSync_process.CheckPlayerplaying("db") Then _bw_active_db_jobs = 0 - MPSync_process.logStats("MPSync: [Process_DB_folder] aborted as player playing.", "INFO") + MPSync_process.logStats("MPSync: [Process_DB_folder] aborted as player playing.", MessageType.INFO) Else - If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [Process_DB_folder] waiting for background threads to finish... " & _bw_active_db_jobs.ToString & " threads remaining processing {" & jobs & "}.", "DEBUG") + If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [Process_DB_folder] waiting for background threads to finish... " & _bw_active_db_jobs.ToString & " threads remaining processing {" & jobs & "}.", MessageType.DEBUG) MPSync_process.wait(10, False) End If Loop End Sub - Private Function checkbytrigger(ByVal source As String, ByVal target As String, ByVal database As String) As String + Private Function checkbytrigger(ByVal source As String, ByVal target As String, ByVal database As String) As List(Of TableInfo) - Dim parm As String = String.Empty - Dim x As Integer = 0 - - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader = Nothing + Dim parm As List(Of TableInfo) = New List(Of TableInfo) - MPSync_process.logStats("MPSync: [checkbytrigger] checking for tables in database " & source & database & " that need synchronization...", "DEBUG") + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" - SQLconnect.Open() + MPSync_process.logStats("MPSync: [checkbytrigger] checking for tables in database " & source & database & " that need synchronization...", MessageType.DEBUG) - Try - - SQLcommand.CommandText = "SELECT tablename FROM mpsync_trigger WHERE lastupdated > '" & lastsync & "' ORDER BY lastupdated, tablename" - SQLreader = SQLcommand.ExecuteReader() - - While SQLreader.Read() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" + SQLconnect.Open() - parm += source & "|" & target & "|" & database & "|" & SQLreader(0) & "¬" - x += 1 + Try + Dim skipWatched As String = "" + If Not MPSync_process.check_watched Then + skipWatched = " AND NOT tablename like '%watched_history%'" + End If + SQLcommand.CommandText = "SELECT tablename FROM mpsync_trigger WHERE lastupdated > '" & lastsync & "'" & skipWatched & " ORDER BY lastupdated, tablename" + Using SQLreader = SQLcommand.ExecuteReader() - End While + While SQLreader.Read() + parm.Add(New TableInfo(source, target, database, SQLreader.GetString(0))) - Catch ex As Exception - MPSync_process.logStats("MPSync: [checkbytrigger] Error reading mpsync_trigger from " & target & database & " with exception: " & ex.Message, "ERROR") - End Try + End While + End Using - SQLreader.Close() + Catch ex As Exception + MPSync_process.logStats("MPSync: [checkbytrigger] Error reading mpsync_trigger from " & target & database & " with exception: " & ex.Message, MessageType.ERR) + End Try + End Using If MPSync_process.TableExist(target, database, "mpsync") Then - SQLconnect.Close() + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - MPSync_process.logStats("MPSync: [checkbytrigger] checking for records in mpsync table in database " & target & database, "DEBUG") + MPSync_process.logStats("MPSync: [checkbytrigger] checking for records in mpsync table in database " & target & database, MessageType.DEBUG) - Try + Dim skipWatched As String = "" + If Not MPSync_process.check_watched Then + skipWatched = "WHERE NOT tablename like '%watched_history%'" + End If SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(target & database) & ";Read Only=True;" SQLconnect.Open() - SQLcommand = SQLconnect.CreateCommand - SQLcommand.CommandText = "SELECT tablename FROM mpsync ORDER BY mps_lastupdated, tablename" - SQLreader = SQLcommand.ExecuteReader() + SQLcommand.CommandText = "SELECT tablename FROM mpsync " & skipWatched & " ORDER BY mps_lastupdated, tablename" + Using SQLreader = SQLcommand.ExecuteReader() + Try - While SQLreader.Read() + While SQLreader.Read() - If Not parm.Contains(SQLreader(0)) Then - parm += source & "|" & target & "|" & database & "|" & SQLreader(0) & "¬" - x += 1 - End If + If Not parm.Any(Function(p) p.name = SQLreader.GetString(0)) Then + parm.Add(New TableInfo(source, target, database, SQLreader.GetString(0))) + End If - End While + End While - Catch ex As Exception - MPSync_process.logStats("MPSync: [checkbytrigger] Error reading mpsync from " & target & database & " with exception: " & ex.Message, "ERROR") - End Try + Catch ex As Exception + MPSync_process.logStats("MPSync: [checkbytrigger] Error reading mpsync from " & target & database & " with exception: " & ex.Message, MessageType.ERR) + End Try + End Using + End Using End If - SQLconnect.Close() - MPSync_process.logStats("MPSync: [checkbytrigger] " & x.ToString & " tables in database " & source & database & " need synchronization.", "DEBUG") + MPSync_process.logStats("MPSync: [checkbytrigger] " & parm.Count.ToString & " tables in database " & source & database & " need synchronization.", MessageType.DEBUG) Return parm End Function - Private Function getDatabaseRecords(ByVal source As String, ByVal target As String, ByVal database As String, ByVal parm As String) As String + Private Function getDatabaseRecords(ByVal source As String, ByVal target As String, ByVal database As String, ByVal parm As List(Of TableInfo)) As List(Of TableInfo) - Dim finalparm As String = parm + Dim finalparm As List(Of TableInfo) = parm - If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [getDatabaseRecords] database " & database & " tables record count started.", "DEBUG") + If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [getDatabaseRecords] database " & database & " tables record count started.", MessageType.DEBUG) - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand1 As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLcommand2 As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader1, SQLreader2 As SQLiteDataReader + Using SQLconnect As New SQLiteConnection(), + SQLcommand1 As SQLiteCommand = SQLconnect.CreateCommand, + SQLcommand2 As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" - SQLconnect.Open() - - SQLcommand1.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(target & database) & "' AS target" - SQLcommand1.ExecuteNonQuery() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" + SQLconnect.Open() - SQLcommand1.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'mpsync%' AND name NOT LIKE 'sqlite%'" - SQLreader1 = SQLcommand1.ExecuteReader() + SQLcommand1.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(target & database) & "' AS target" + SQLcommand1.ExecuteNonQuery() - While SQLreader1.Read() + SQLcommand1.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'mpsync%' AND name NOT LIKE 'sqlite%'" + If Not MPSync_process.check_watched Then + SQLcommand1.CommandText = SQLcommand1.CommandText & "AND NOT name like '%watched_history%'" + End If + Using SQLreader1 = SQLcommand1.ExecuteReader() - SQLcommand2.CommandText = "SELECT CASE WHEN (SELECT COUNT(*) FROM " & SQLreader1(0) & " EXCEPT SELECT COUNT(*) FROM target." & SQLreader1(0) & ") IS NULL THEN 0 ELSE 1 END" - SQLreader2 = SQLcommand2.ExecuteReader() - SQLreader2.Read() + While SQLreader1.Read() - If Int(SQLreader2(0)) = 1 Then - If Not finalparm.Contains(SQLreader1(0)) Then finalparm += source & "|" & target & "|" & database & "|" & SQLreader1(0) & "¬" - End If + SQLcommand2.CommandText = "SELECT CASE WHEN (SELECT COUNT(*) FROM " & SQLreader1.GetString(0) & " EXCEPT SELECT COUNT(*) FROM target." & SQLreader1.GetString(0) & ") IS NULL THEN 0 ELSE 1 END" + Using SQLreader2 = SQLcommand2.ExecuteReader() + SQLreader2.Read() - SQLreader2.Close() + If Int(SQLreader2(0)) = 1 Then + If Not finalparm.Any(Function(f) f.name = SQLreader1.GetString(0)) Then + finalparm.Add(New TableInfo(source, target, database, SQLreader1.GetString(0))) + End If + End If - End While + End Using - SQLconnect.Close() + End While + End Using + End Using - If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [getDatabaseRecords] database " & database & " tables record count complete.", "DEBUG") + If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [getDatabaseRecords] database " & database & " tables record count complete.", MessageType.DEBUG) Return finalparm @@ -698,53 +705,54 @@ Public Class MPSync_process_DB Private Sub ProcessTables(ByVal source As String, ByVal target As String, ByVal database As String) - MPSync_process.logStats("MPSync: [ProcessTables] process for database " & source & database & " started.", "DEBUG") + MPSync_process.logStats("MPSync: [ProcessTables] process for database " & source & database & " started.", MessageType.DEBUG) ' execute only once in a day If DateDiff(DateInterval.Day, CDate(lastsync), Now) > 0 Then CheckTables(source, target, database) - Dim parm As String = String.Empty + Dim parm As SyncDbParams = New SyncDbParams + If MPSync_process.TableExist(source, database, "mpsync_trigger") Then - parm = getDatabaseRecords(source, target, database, checkbytrigger(source, target, database)) + parm.tables = getDatabaseRecords(source, target, database, checkbytrigger(source, target, database)) Else - Dim omit As Array = {"mpsync", "mpsync_trigger", "sqlite_sequence", "sqlite_stat1", "sqlite_stat2"} - - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader + Dim omit As List(Of String) = New List(Of String)({"mpsync", "mpsync_trigger", "sqlite_sequence", "sqlite_stat1", "sqlite_stat2"}) + If Not MPSync_process.check_watched Then + omit.Add("watched_history") + End If + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" - SQLconnect.Open() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" + SQLconnect.Open() - MPSync_process.logStats("MPSync: [ProcessTables] selecting tables from database " & source & database, "DEBUG") + MPSync_process.logStats("MPSync: [ProcessTables] selecting tables from database " & source & database, MessageType.DEBUG) - Dim x As Integer = 0 - SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name" - SQLreader = SQLcommand.ExecuteReader() + SQLcommand.CommandText = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name" + Using SQLreader = SQLcommand.ExecuteReader() - While SQLreader.Read() + While SQLreader.Read() - If Array.IndexOf(omit, SQLreader(0)) = -1 Then - parm += source & "|" & target & "|" & database & "|" & SQLreader(0) & "¬" - x += 1 - End If + If Not omit.Contains(SQLreader.GetString(0)) Then + parm.tables.Add(New TableInfo(source, target, database, SQLreader.GetString(0))) + End If - End While + End While + End Using - SQLconnect.Close() + End Using - MPSync_process.logStats("MPSync: [ProcessTables] " & x.ToString & " table selected from database " & source & database, "DEBUG") + MPSync_process.logStats("MPSync: [ProcessTables] " & parm.tables.Count.ToString & " table selected from database " & source & database, MessageType.DEBUG) End If - If parm <> String.Empty Then + If parm.tables.Count > 0 Then ' check if there are available threads to submit current stream, unless there is no limit. If MPSync_process.checkThreads("DB") <> -1 Then Do While _bw_active_db_jobs >= MPSync_process.checkThreads("DB") - MPSync_process.logStats("MPSync: [ProcessTables] waiting for available threads.", "DEBUG") + MPSync_process.logStats("MPSync: [ProcessTables] waiting for available threads.", MessageType.DEBUG) MPSync_process.wait(10, False) Loop @@ -762,7 +770,7 @@ Public Class MPSync_process_DB bw_dbs.Add(database) End If - MPSync_process.logStats("MPSync: [ProcessTables] process for database " & source & database & " complete.", "DEBUG") + MPSync_process.logStats("MPSync: [ProcessTables] process for database " & source & database & " complete.", MessageType.DEBUG) End Sub @@ -781,13 +789,13 @@ Public Class MPSync_process_DB If s_lastwrite > t_lastwrite Then Try - MPSync_process.logStats("MPSync: [ProcessObject] Copying object " & objects & " to " & target & obj, "LOG") + MPSync_process.logStats("MPSync: [ProcessObject] Copying object " & objects & " to " & target & obj, MessageType.LOG) IO.File.Copy(objects, target & obj, True) Catch ex As Exception - MPSync_process.logStats("MPSync: [ProcessObject] Error copying " & objects & " with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: [ProcessObject] Error copying " & objects & " with exception: " & ex.Message, MessageType.ERR) End Try Else - MPSync_process.logStats("MPSync: [ProcessObject] No changes detected in " & objects & ". Skipping copy.", "DEBUG") + MPSync_process.logStats("MPSync: [ProcessObject] No changes detected in " & objects & ". Skipping copy.", MessageType.DEBUG) End If End If @@ -798,157 +806,141 @@ Public Class MPSync_process_DB Private Sub CheckTables(ByVal source As String, ByVal target As String, ByVal database As String) - MPSync_process.logStats("MPSync: [CheckTables] Check tables structures in database " & database & " started.", "DEBUG") - - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - Dim SQLreader As SQLiteDataReader - Dim s_columns, t_columns As Array - Dim s_temp(), t_temp() As String - Dim missing(,) As String = Nothing - Dim diff As IEnumerable(Of String) - - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" - SQLconnect.Open() - SQLcommand.CommandText = "SELECT name, sql FROM sqlite_master WHERE type=""table""" - SQLreader = SQLcommand.ExecuteReader() - - While SQLreader.Read() + MPSync_process.logStats("MPSync: [CheckTables] Check tables structures in database " & database & " started.", MessageType.DEBUG) - s_columns = getFields(source, database, SQLreader(0)) - t_columns = getFields(target, database, SQLreader(0)) + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Dim s_columns, t_columns As List(Of ColumnInfo) - If t_columns Is Nothing Then - CreateTable(target, database, SQLreader(1)) - t_columns = s_columns - End If - - s_temp = getArray(s_columns, 0) - t_temp = getArray(t_columns, 0) - - diff = s_temp.Except(t_temp) + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(source & database) & ";Read Only=True;" + SQLconnect.Open() + SQLcommand.CommandText = "SELECT name, sql FROM sqlite_master WHERE type=""table""" + Using SQLreader = SQLcommand.ExecuteReader() - If diff.OfType(Of String)().ToArray().Length > 0 Then + While SQLreader.Read() - For x As Integer = 0 To UBound(diff.ToArray) - ReDim Preserve missing(UBound(s_columns, 1), x) - For y As Integer = 0 To UBound(s_columns, 1) - missing(y, x) = s_columns(y, Array.IndexOf(s_temp, diff.ToArray(x))) - Next - Next + s_columns = getFields(source, database, SQLreader.GetString(0)) + t_columns = getFields(target, database, SQLreader.GetString(0)) - AddTableMissingFields(target, database, SQLreader(0), missing) + If t_columns Is Nothing Then + CreateTable(target, database, SQLreader.GetString(1)) + t_columns = s_columns + End If + Dim diff As IEnumerable(Of ColumnInfo) = s_columns.Where(Function(s) Not t_columns.Any(Function(t) t.name = s.name)) - End If + If diff.Count > 0 Then + AddTableMissingFields(target, database, SQLreader.GetString(0), diff) + End If - End While + End While + End Using - SQLconnect.Close() + End Using - MPSync_process.logStats("MPSync: [CheckTables] Check tables structures in database " & database & " complete.", "DEBUG") + MPSync_process.logStats("MPSync: [CheckTables] Check tables structures in database " & database & " complete.", MessageType.DEBUG) End Sub Private Sub CreateTable(ByVal path As String, ByVal database As String, ByVal sql As String) - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - MPSync_process.logStats("MPSync: [Createtable] " & sql & " in database " & path & database, "DEBUG") + MPSync_process.logStats("MPSync: [Createtable] " & sql & " in database " & path & database, MessageType.DEBUG) - Try - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) - SQLconnect.Open() - SQLcommand.CommandText = sql - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - MPSync_process.logStats("MPSync: [Createtable] " & sql & " error with exception: " & ex.Message, "ERROR") - End Try + Try + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) + SQLconnect.Open() + SQLcommand.CommandText = sql + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + MPSync_process.logStats("MPSync: [Createtable] " & sql & " error with exception: " & ex.Message, MessageType.ERR) + End Try - SQLconnect.Close() + End Using End Sub - Private Sub AddTableMissingFields(ByVal path As String, ByVal database As String, ByVal table As String, ByVal missing As Array) + Private Sub AddTableMissingFields(ByVal path As String, ByVal database As String, ByVal table As String, ByVal missing As IEnumerable(Of ColumnInfo)) Dim SQL As String - Dim SQLconnect As New SQLite.SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - MPSync_process.logStats("MPSync: [AddTableMissingFields] Adding missing columns on target for table " & table & " in database " & database, "LOG") + MPSync_process.logStats("MPSync: [AddTableMissingFields] Adding missing columns on target for table " & table & " in database " & database, MessageType.LOG) - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) - SQLconnect.Open() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) + SQLconnect.Open() - For x As Integer = 0 To UBound(missing, 2) + For x As Integer = 0 To missing.Count - 1 - SQL = "ALTER TABLE " & table & " ADD COLUMN " & missing(0, x) & " " & missing(1, x) & " " + SQL = "ALTER TABLE " & table & " ADD COLUMN " & missing(x).name & " " & missing(x).type & " " - If missing(2, x) = "1" Then SQL &= "NOT NULL " + If missing(x).notNull Then SQL &= "NOT NULL " - Try - MPSync_process.logStats("MPSync: [AddTableMissingFields] " & SQL, "DEBUG") - SQLcommand.CommandText = SQL - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - MPSync_process.logStats("MPSync: [AddTableMissingFields] " & SQL & " error with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: [AddTableMissingFields] Error adding field " & missing(0, x) & " to table " & table & " in " & path & database, "ERROR") - End Try + Try + MPSync_process.logStats("MPSync: [AddTableMissingFields] " & SQL, MessageType.DEBUG) + SQLcommand.CommandText = SQL + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + MPSync_process.logStats("MPSync: [AddTableMissingFields] " & SQL & " error with exception: " & ex.Message, MessageType.DEBUG) + MPSync_process.logStats("MPSync: [AddTableMissingFields] Error adding field " & missing(x).name & " to table " & table & " in " & path & database, MessageType.ERR) + End Try - Next + Next - SQLconnect.Close() + End Using End Sub Private Sub bw_sync_db_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) - Dim parm() As String = Split(e.Argument, "¬") - Dim args() As String = Split(parm(0), "|") + Try - MPSync_process.logStats("MPSync: [ProcessTables][bw_sync_db_worker] background synchronization of " & args(2) & " database started.", "LOG") + If e.Argument.GetType() Is GetType(SyncDbParams) Then + Dim parm As SyncDbParams = CType(e.Argument, SyncDbParams) - Dim x As Integer + MPSync_process.logStats("MPSync: [ProcessTables][bw_sync_db_worker] background synchronization of " & parm.tables(0).database & " database started.", MessageType.LOG) - For x = 0 To parm.Count - 1 + Dim x As Integer - If parm(x) <> "" Then + For x = 0 To parm.tables.Count - 1 + db_worker(parm.tables(x).source, parm.tables(x).target, parm.tables(x).database, parm.tables(x).name) + Next - args = Split(parm(x), "|") + If MPSync_process.sync_type = "Timestamp" Then - db_worker(args(0), args(1), args(2), args(3)) + Dim s_lastwrite As Date = My.Computer.FileSystem.GetFileInfo(parm.tables(0).source & parm.tables(0).database).LastWriteTimeUtc + Dim t_lastwrite As Date = My.Computer.FileSystem.GetFileInfo(parm.tables(0).target & parm.tables(0).database).LastWriteTimeUtc - End If + x = Array.IndexOf(MPSync_process.dbname, parm.tables(0).database) - Next - - If MPSync_process.sync_type = "Timestamp" Then + If s_lastwrite > t_lastwrite Then + MPSync_process.dbinfo(x).LastWriteTimeUtc = s_lastwrite + ElseIf s_lastwrite < t_lastwrite Then + MPSync_process.dbinfo(x).LastWriteTimeUtc = t_lastwrite + End If - Dim s_lastwrite As Date = My.Computer.FileSystem.GetFileInfo(args(0) & args(2)).LastWriteTimeUtc - Dim t_lastwrite As Date = My.Computer.FileSystem.GetFileInfo(args(1) & args(2)).LastWriteTimeUtc + End If - x = Array.IndexOf(MPSync_process.dbname, args(2)) + _bw_active_db_jobs -= 1 + bw_dbs.RemoveAt(bw_dbs.IndexOf(parm.tables(0).database)) - If s_lastwrite > t_lastwrite Then - MPSync_process.dbinfo(x).LastWriteTimeUtc = s_lastwrite - ElseIf s_lastwrite < t_lastwrite Then - MPSync_process.dbinfo(x).LastWriteTimeUtc = t_lastwrite + MPSync_process.logStats("MPSync: [ProcessTables][bw_sync_db_worker] background synchronization of " & parm.tables(0).database & " database completed.", MessageType.LOG) End If - End If - - _bw_active_db_jobs -= 1 - bw_dbs.RemoveAt(bw_dbs.IndexOf(args(2))) - MPSync_process.logStats("MPSync: [ProcessTables][bw_sync_db_worker] background synchronization of " & args(2) & " database completed.", "LOG") + Catch ex As Exception + MPSync_process.logStats("MPSync: [ProcessTables][bw_sync_db_worker] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub Private Sub db_worker(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String) - Dim columns(,) As String = Nothing + Dim columns As List(Of ColumnInfo) = Nothing - MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " started.", "LOG") + MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " started.", MessageType.LOG) If MPSync_process.check_watched Then ' check if master client @@ -962,16 +954,16 @@ Public Class MPSync_process_DB columns = getFields(s_path, database, table) If Synchronize_DB(s_path, t_path, database, table, columns, MPSync_process._db_sync_method) Then - MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " complete.", "LOG") + MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " complete.", MessageType.LOG) Else - MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " failed.", "LOG") + MPSync_process.logStats("MPSync: [db_worker] synchronization of table " & table & " in database " & t_path & database & " failed.", MessageType.LOG) End If End Sub - Public Function Synchronize_DB(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As Array, ByVal method As Integer) As Boolean + Public Function Synchronize_DB(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As List(Of ColumnInfo), ByVal method As Integer) As Boolean - MPSync_process.logStats("MPSync: [Synchronize_DB] synchronization of table " & table.Replace("~", String.Empty) & " in database " & t_path & database & " in progress...", "LOG") + MPSync_process.logStats("MPSync: [Synchronize_DB] synchronization of table " & table.Replace("~", String.Empty) & " in database " & t_path & database & " in progress...", MessageType.LOG) If DeleteRecords(s_path, t_path, database, table, columns, method) Then Return InsertRecords(s_path, t_path, database, table, columns, method) @@ -988,13 +980,13 @@ Public Class MPSync_process_DB If x <> -1 Then If Array.IndexOf(mps.getTables(database), table) <> -1 Then - MPSync_process.logStats("MPSync: [UpdateSlave] synchronization of mpsync for table " & table & " in database " & source & database & " in progress...", "LOG") + MPSync_process.logStats("MPSync: [UpdateSlave] synchronization of mpsync for table " & table & " in database " & source & database & " in progress...", MessageType.LOG) - Dim columns As Array = getFields(source, database, "mpsync") + Dim columns As List(Of ColumnInfo) = getFields(source, database, "mpsync") If Synchronize_DB(source, target, database, "~mpsync~", columns, 1) Then UpdateMaster(source, target, database, table) - MPSync_process.logStats("MPSync: [UpdateSlave] synchronization of mpsync for table " & table & " in database " & source & database & " complete.", "LOG") + MPSync_process.logStats("MPSync: [UpdateSlave] synchronization of mpsync for table " & table & " in database " & source & database & " complete.", MessageType.LOG) End If End If @@ -1010,16 +1002,17 @@ Public Class MPSync_process_DB If x <> -1 Then If Array.IndexOf(mps.getTables(database), table) <> -1 Then - MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " in progress...", "LOG") + MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " in progress...", MessageType.LOG) - Dim mps_columns As Array = Nothing - Dim columns, s_data, t_data, w_values As Array + Dim mps_columns As List(Of ColumnInfo) = Nothing + Dim columns As List(Of ColumnInfo) + Dim s_data, t_data, w_values As Array s_data = LoadTable(source, database, "mpsync", mps_columns, "tablename = '" & table & "'", "mps_lastupdated") t_data = LoadTable(target, database, "mpsync", mps_columns, "tablename = '" & table & "'", "mps_lastupdated") If s_data Is Nothing And t_data Is Nothing Then - MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " nothing to update.", "LOG") + MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " nothing to update.", MessageType.LOG) Exit Sub End If @@ -1034,87 +1027,96 @@ Public Class MPSync_process_DB Cleanup_mpsync(source, database, s_data) End If - MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " complete.", "LOG") + MPSync_process.logStats("MPSync: [UpdateMaster] synchronization of watched for table " & table & " in database " & source & database & " complete.", MessageType.LOG) End If End If End Sub - Private Sub UpdateRecords_mpsync(ByVal path As String, ByVal database As String, ByVal table As String, ByVal w_values As Array, ByVal table_columns As Array, ByVal columns As Array) + Private Sub UpdateRecords_mpsync(ByVal path As String, ByVal database As String, ByVal table As String, ByVal w_values As Array, ByVal table_columns As List(Of ColumnInfo), ByVal columns As List(Of ColumnInfo)) If w_values.OfType(Of String)().ToArray().Length = 0 Then Exit Sub Dim i, x, z As Integer Dim pkey As String = Nothing - Dim updcols As Array = getArray(table_columns, 0) + Dim updcols As Array = table_columns.Select(Function(t) t.name).ToArray Dim fields, updvalues, where, update(), a_values() As String - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - x = getPK(columns, pkey) + x = getPK(columns, pkey) - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) - SQLconnect.Open() - SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" - SQLcommand.ExecuteNonQuery() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) + SQLconnect.Open() + SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" + SQLcommand.ExecuteNonQuery() - For y As Integer = 0 To UBound(w_values, 2) + For y As Integer = 0 To UBound(w_values, 2) - i = 0 - fields = Nothing - update = Nothing - where = Nothing - a_values = Split(w_values(1, y), dlm) + i = 0 + fields = Nothing + update = Nothing + where = Nothing + a_values = Split(w_values(1, y), dlm) - For x = 0 To UBound(columns, 2) - z = Array.IndexOf(updcols, columns(0, x)) - If z <> -1 Then - If columns(0, x) <> pkey Then - ReDim Preserve update(i) - update(i) = columns(0, x) & "=" & FormatValue(a_values(z), columns(1, x)) - fields &= columns(0, x) & "," - i += 1 - Else - where = pkey & " = " & FormatValue(a_values(z), columns(1, x)) + For x = 0 To columns.Count - 1 + z = Array.IndexOf(updcols, columns(x).name) + If z <> -1 Then + If columns(x).name <> pkey Then + ReDim Preserve update(i) + update(i) = columns(x).name & "=" & FormatValue(a_values(z), columns(x).type) + fields &= columns(x).name & "," + i += 1 + Else + where = pkey & " = " & FormatValue(a_values(z), columns(x).type) + End If End If - End If - Next + Next - fields = Left(fields, Len(fields) - 1) - where = Left(where, Len(where) - 1) + fields = Left(fields, Len(fields) - 1) + where = Left(where, Len(where) - 1) - ' get update values from table and compare if anything changed - Dim curvalues() As String + ' get update values from table and compare if anything changed + Dim curvalues() As String - curvalues = getCurrentTableValues(path, database, table, columns, updcols, pkey, fields, where) + curvalues = getCurrentTableValues(path, database, table, columns, updcols, pkey, fields, where) - If curvalues IsNot Nothing Then + If curvalues IsNot Nothing Then - ' construct update clause - updvalues = getUpdateValues(update, curvalues) + ' construct update clause + updvalues = getUpdateValues(update, curvalues) - If updvalues <> Nothing Then + If updvalues <> Nothing Then - Try - MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] UPDATE " & table & " SET " & updvalues & " WHERE " & where, "DEBUG") - SQLcommand.CommandText = "UPDATE " & table & " SET " & updvalues & " WHERE " & where - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & path & database & " failed with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] Error synchronizing table " & table & " in database " & path & database, "ERROR") - End Try + Try + MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] UPDATE " & table & " SET " & updvalues & " WHERE " & where, MessageType.DEBUG) + SQLcommand.CommandText = "UPDATE " & table & " SET " & updvalues & " WHERE " & where + SQLcommand.ExecuteNonQuery() + Catch ex As Exception + MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & path & database & " failed with exception: " & ex.Message, MessageType.DEBUG) + MPSync_process.logStats("MPSync: [UpdateRecords_mpsync] Error synchronizing table " & table & " in database " & path & database, MessageType.ERR) + End Try + End If End If - End If - Next + Next - SQLconnect.Close() + End Using End Sub - Private Function InsertRecords(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As Array, ByVal method As Integer) As Boolean + Private Function GetColumnsToCheck(ByVal tablename As String, ByVal columns As List(Of ColumnInfo)) As String + If Not MPSync_process.check_watched And tablename = "user_movie_settings" Then + Dim colArray As String() = columns.Where(Function(c) c.name <> "watched" And Not c.name Like "resume*").Select(Function(c2) c2.name).ToArray + Return String.Join(",", colArray) + Else + Return "*" + End If + End Function + + Private Function InsertRecords(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As List(Of ColumnInfo), ByVal method As Integer) As Boolean ' propagate additions If method = 2 Then Return True @@ -1130,62 +1132,63 @@ Public Class MPSync_process_DB If Not MPSync_process.CheckPlayerplaying("db") Then - MPSync_process.logStats("MPSync: [InsertRecords] adding missing entries on target for table " & table & " in database " & t_path & database, "DEBUG") + MPSync_process.logStats("MPSync: [InsertRecords] adding missing entries on target for table " & table & " in database " & t_path & database, MessageType.DEBUG) - Dim SQLconnect As New SQLiteConnection() - Dim SQLmemory As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLmemory.CreateCommand - Dim pkey As String = Nothing - Dim y As Integer = 0 + Using SQLconnect As New SQLiteConnection(), + SQLmemory As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLmemory.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(s_path & database) & ";Read Only=True;" - SQLconnect.Open() + Dim pkey As String = Nothing + Dim y As Integer = 0 - SQLmemory.ConnectionString = "Data Source=:memory:" - SQLmemory.Open() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(s_path & database) & ";Read Only=True;" + SQLconnect.Open() - SQLconnect.BackupDatabase(SQLmemory, "main", "main", -1, Nothing, 0) + SQLmemory.ConnectionString = "Data Source=:memory:" + SQLmemory.Open() - SQLconnect.Close() - SQLconnect.Dispose() + SQLconnect.BackupDatabase(SQLmemory, "main", "main", -1, Nothing, 0) - SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(t_path & database) & "' AS target" - SQLcommand.ExecuteNonQuery() + SQLconnect.Close() + SQLconnect.Dispose() - Try - getPK(columns, pkey) + SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" + SQLcommand.ExecuteNonQuery() + SQLcommand.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(t_path & database) & "' AS target" + SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = "INSERT INTO target." & table & " SELECT * FROM " & table & " EXCEPT SELECT * FROM target." & table + Try + If getPK(columns, pkey) = -1 Then pkey = columns(0).name - MPSync_process.logStats("MPSync: [InsertRecords] " & SQLcommand.CommandText, "DEBUG") + Dim cols As String = GetColumnsToCheck(table, columns) + SQLcommand.CommandText = "INSERT INTO target." & table & " SELECT * FROM " & table & + " WHERE " & pkey & " in ( SELECT " & pkey & " FROM ( SELECT " & cols & " FROM " & table & " EXCEPT SELECT " & cols & " FROM target." & table & ") )" - SQLcommand.ExecuteNonQuery() + MPSync_process.logStats("MPSync: [InsertRecords] " & SQLcommand.CommandText, MessageType.DEBUG) - SQLcommand.CommandText = "SELECT CASE WHEN MAX(CHANGES()) IS NULL THEN 0 ELSE MAX(CHANGES()) END FROM target." & table - Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader() - SQLreader.Read() - y = Int(SQLreader(0)) - SQLreader.Close() + SQLcommand.ExecuteNonQuery() - MPSync_process.logStats("MPSync: [InsertRecords] " & y.ToString & " records added in " & table & " in database " & t_path & database, "DEBUG") - Catch ex As Exception - MPSync_process.logStats("MPSync: [InsertRecords] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & t_path & database & " failed with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: [InsertRecords] Error adding record to table " & table & " in database " & t_path & database & " with exception: " & ex.Message, "ERROR") - rtc = False - End Try + SQLcommand.CommandText = "SELECT CASE WHEN MAX(CHANGES()) IS NULL THEN 0 ELSE MAX(CHANGES()) END FROM target." & table + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + y = SQLreader.GetInt32(0) + End Using - SQLmemory.Close() - SQLmemory.Dispose() + MPSync_process.logStats("MPSync: [InsertRecords] " & y.ToString & " records added in " & table & " in database " & t_path & database, MessageType.DEBUG) + Catch ex As Exception + MPSync_process.logStats("MPSync: [InsertRecords] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & t_path & database & " failed with exception: " & ex.Message, MessageType.DEBUG) + MPSync_process.logStats("MPSync: [InsertRecords] Error adding record to table " & table & " in database " & t_path & database & " with exception: " & ex.Message, MessageType.ERR) + rtc = False + End Try + End Using End If Return rtc End Function - Private Function DeleteRecords(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As Array, ByVal method As Integer) As Boolean + Private Function DeleteRecords(ByVal s_path As String, ByVal t_path As String, ByVal database As String, ByVal table As String, ByVal columns As List(Of ColumnInfo), ByVal method As Integer) As Boolean ' propagate deletions If method = 1 Or table = "mpsync" Then Return True @@ -1196,171 +1199,84 @@ Public Class MPSync_process_DB If Not MPSync_process.CheckPlayerplaying("db") Then - MPSync_process.logStats("MPSync: [DeleteRecords] deleting extra entries on target for table " & table & " in database " & t_path & database, "DEBUG") - - Dim SQLconnect As New SQLiteConnection() - Dim SQLmemory As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLmemory.CreateCommand - Dim pkey As String = Nothing - Dim y As Integer = 0 + MPSync_process.logStats("MPSync: [DeleteRecords] deleting extra entries on target for table " & table & " in database " & t_path & database, MessageType.DEBUG) - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(s_path & database) & ";Read Only=True;" - SQLconnect.Open() - - SQLmemory.ConnectionString = "Data Source=:memory:" - SQLmemory.Open() - - SQLconnect.BackupDatabase(SQLmemory, "main", "main", -1, Nothing, 0) + Using SQLconnect As New SQLiteConnection(), + SQLmemory As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLmemory.CreateCommand - SQLconnect.Close() - SQLconnect.Dispose() + Dim pkey As String = Nothing + Dim y As Integer = 0 - SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(t_path & database) & "' AS target" - SQLcommand.ExecuteNonQuery() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(s_path & database) & ";Read Only=True;" + SQLconnect.Open() - Try - If getPK(columns, pkey) = -1 Then pkey = columns(0, 0) + SQLmemory.ConnectionString = "Data Source=:memory:" + SQLmemory.Open() - SQLcommand.CommandText = "DELETE FROM target." & table & " WHERE " & pkey & " IN (SELECT " & pkey & " FROM (SELECT * FROM target." & table & " EXCEPT SELECT * FROM " & table & "))" + SQLconnect.BackupDatabase(SQLmemory, "main", "main", -1, Nothing, 0) - MPSync_process.logStats("MPSync: [DeleteRecords] " & SQLcommand.CommandText, "DEBUG") + SQLconnect.Close() + SQLconnect.Dispose() + SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" + SQLcommand.ExecuteNonQuery() + SQLcommand.CommandText = "ATTACH DATABASE '" & MPSync_process.p_Database(t_path & database) & "' AS target" SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = "SELECT CASE WHEN MAX(CHANGES()) IS NULL THEN 0 ELSE MAX(CHANGES()) END FROM target." & table - Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader() - SQLreader.Read() - y = Int(SQLreader(0)) - SQLreader.Close() + Try + If getPK(columns, pkey) = -1 Then pkey = columns(0).name - MPSync_process.logStats("MPSync: [DeleteRecords] " & y.ToString & " records deleted from " & table & " in database " & t_path & database, "DEBUG") - Catch ex As Exception - MPSync_process.logStats("MPSync: [DeleteRecords] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & t_path & database & " failed with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: Error [DeleteRecords] deleting records from table " & table & " in database " & t_path & database & " with exception: " & ex.Message, "ERROR") - rtc = False - End Try + Dim cols As String = GetColumnsToCheck(table, columns) + SQLcommand.CommandText = "DELETE FROM target." & table & " WHERE " & pkey & " IN (SELECT " & pkey & " FROM (SELECT " & cols & " FROM target." & table & " EXCEPT SELECT " & cols & " FROM " & table & "))" - SQLmemory.Close() - SQLmemory.Dispose() + MPSync_process.logStats("MPSync: [DeleteRecords] " & SQLcommand.CommandText, MessageType.DEBUG) - End If + SQLcommand.ExecuteNonQuery() - Return rtc - - End Function + SQLcommand.CommandText = "SELECT CASE WHEN MAX(CHANGES()) IS NULL THEN 0 ELSE MAX(CHANGES()) END FROM target." & table + Using SQLreader = SQLcommand.ExecuteReader() + SQLreader.Read() + y = SQLreader.GetInt32(0) + End Using - Private Sub UpdateRecords(ByVal path As String, ByVal database As String, ByVal table As String, ByVal s_data As Array, ByVal t_data As Array, ByVal columns As Array, ByVal method As Integer) + MPSync_process.logStats("MPSync: [DeleteRecords] " & y.ToString & " records deleted from " & table & " in database " & t_path & database, MessageType.DEBUG) + Catch ex As Exception + MPSync_process.logStats("MPSync: [DeleteRecords] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & t_path & database & " failed with exception: " & ex.Message, MessageType.DEBUG) + MPSync_process.logStats("MPSync: Error [DeleteRecords] deleting records from table " & table & " in database " & t_path & database & " with exception: " & ex.Message, MessageType.ERR) + rtc = False + End Try - Dim mps_columns As Array = Nothing - Dim w_values As Array + End Using - If s_data Is Nothing And t_data Is Nothing Then - MPSync_process.logStats("MPSync: [UpdateRecords] synchronization of table " & table & " in database " & path & database & " nothing to update.", "LOG") - Exit Sub End If - w_values = BuildUpdateArray(s_data, t_data, columns) - - If w_values.OfType(Of String)().ToArray().Length = 0 Then Exit Sub - - Dim i, x, z As Integer - Dim pkey As String = Nothing - Dim updcols As Array = getArray(columns, 0) - Dim fields, updvalues, where, update(), a_values() As String - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - - x = getPK(columns, pkey) - - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) - SQLconnect.Open() - SQLcommand.CommandText = "PRAGMA temp_store=2;PRAGMA journal_mode=off;PRAGMA synchronous=off;" - SQLcommand.ExecuteNonQuery() - - For y As Integer = 0 To UBound(w_values, 2) - - If Not MPSync_process.CheckPlayerplaying("db") Then - - i = 0 - fields = Nothing - update = Nothing - where = Nothing - a_values = Split(w_values(1, y), dlm) - - For x = 0 To UBound(columns, 2) - z = Array.IndexOf(updcols, columns(0, x)) - If z <> -1 Then - If columns(0, x) <> pkey Then - ReDim Preserve update(i) - update(i) = columns(0, x) & "=" & FormatValue(a_values(z), columns(1, x)) - fields &= columns(0, x) & "," - i += 1 - Else - where = pkey & " = " & FormatValue(a_values(z), columns(1, x)) - End If - End If - Next - - fields = Left(fields, Len(fields) - 1) - where = Left(where, Len(where) - 1) - - ' get update values from table and compare if anything changed - Dim curvalues() As String - - curvalues = getCurrentTableValues(path, database, table, columns, updcols, pkey, fields, where) - - If curvalues IsNot Nothing Then - - ' construct update clause - updvalues = getUpdateValues(update, curvalues) - - If updvalues <> Nothing Then - - Try - MPSync_process.logStats("MPSync: [UpdateRecords] UPDATE " & table & " SET " & updvalues & " WHERE " & where, "DEBUG") - SQLcommand.CommandText = "UPDATE " & table & " SET " & updvalues & " WHERE " & where - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - MPSync_process.logStats("MPSync: [UpdateRecords] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] on " & path & database & " failed with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: [UpdateRecords] Error synchronizing table " & table & " in database " & path & database, "ERROR") - End Try - - End If - End If - Else - Exit For - End If - - Next - - SQLconnect.Close() + Return rtc - End Sub + End Function Private Sub Cleanup_mpsync(ByVal path As String, ByVal database As String, ByVal data As Array) If data.OfType(Of String)().ToArray().Length = 0 Or data(0, 0) = Nothing Then Exit Sub - Dim SQLconnect As New SQLiteConnection() - Dim SQLcommand As SQLiteCommand = SQLconnect.CreateCommand + Using SQLconnect As New SQLiteConnection(), + SQLcommand As SQLiteCommand = SQLconnect.CreateCommand - SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) - SQLconnect.Open() + SQLconnect.ConnectionString = "Data Source=" & MPSync_process.p_Database(path & database) + SQLconnect.Open() - Try - For y = 0 To UBound(data, 2) - MPSync_process.logStats("MPSync: [Cleanup_mpsync] DELETE FROM mpsync WHERE rowid = " & data(0, y), "DEBUG") - SQLcommand.CommandText = "DELETE FROM mpsync WHERE rowid = " & data(0, y) - SQLcommand.ExecuteNonQuery() - Next - Catch ex As Exception - MPSync_process.logStats("MPSync: [Cleanup_mpsync] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] failed with exception: " & ex.Message, "DEBUG") - MPSync_process.logStats("MPSync: [Cleanup_mpsync] Error deleting record from table mpsync in database " & path & database & " with exception: " & ex.Message, "ERROR") - End Try + Try + For y = 0 To UBound(data, 2) + MPSync_process.logStats("MPSync: [Cleanup_mpsync] DELETE FROM mpsync WHERE rowid = " & data(0, y), MessageType.DEBUG) + SQLcommand.CommandText = "DELETE FROM mpsync WHERE rowid = " & data(0, y) + SQLcommand.ExecuteNonQuery() + Next + Catch ex As Exception + MPSync_process.logStats("MPSync: [Cleanup_mpsync] SQL statement [" & (SQLcommand.CommandText).Replace("""", "'") & "] failed with exception: " & ex.Message, MessageType.DEBUG) + MPSync_process.logStats("MPSync: [Cleanup_mpsync] Error deleting record from table mpsync in database " & path & database & " with exception: " & ex.Message, MessageType.ERR) + End Try - SQLconnect.Close() + End Using End Sub diff --git a/MPSync/MPSync/MPSync_process_Folders.vb b/MPSync/MPSync/MPSync_process_Folders.vb index 984303c..dd37dd6 100644 --- a/MPSync/MPSync/MPSync_process_Folders.vb +++ b/MPSync/MPSync/MPSync_process_Folders.vb @@ -1,7 +1,4 @@ -Imports MediaPortal.GUI.Library - -Imports System.IO -Imports System.Collections.Generic +Imports System.IO Imports System.Threading Imports DirectoryEnumerator @@ -18,102 +15,112 @@ Public Class MPSync_process_Folders Public Shared Sub bw_folders_worker(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) - Dim mps_folders As New MPSync_process_Folders + Try + Dim mps_folders As New MPSync_process_Folders - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] Folders synchronization started.", "INFO") + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] Folders synchronization started.", MessageType.INFO) - Dim x As Integer = -1 - Dim process_thread() As Thread = Nothing - Dim item As Array - Dim list As Array = MPSync_process.p_object_list + Dim x As Integer = -1 + Dim process_thread() As Thread = Nothing + Dim item As Array + Dim list As Array = MPSync_process.p_object_list - _bw_active_fl_jobs = 0 + _bw_active_fl_jobs = 0 - ' populate the CRC32 table - createCRC32table() + ' populate the CRC32 table + createCRC32table() - For Each obj As String In list + For Each obj As String In list - item = Split(obj, "¬") + item = Split(obj, "¬") - If item(1) = "True" Then - ' check if there are available threads to submit current stream, unless there is no limit. + If item(1) = "True" Then + ' check if there are available threads to submit current stream, unless there is no limit. - If MPSync_process.checkThreads("folders") <> -1 Then + If MPSync_process.checkThreads("folders") <> -1 Then - Do While _bw_active_fl_jobs >= MPSync_process.checkThreads("folders") - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] waiting for available threads.", "DEBUG") - MPSync_process.wait(30, False) - Loop + Do While _bw_active_fl_jobs >= MPSync_process.checkThreads("folders") + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] waiting for available threads.", MessageType.DEBUG) + MPSync_process.wait(30, False) + Loop - End If + End If - _bw_active_fl_jobs += 1 + _bw_active_fl_jobs += 1 - x += 1 + x += 1 - ReDim Preserve mps_folders.foldertypes(x), mps_folders.s_paths(x), mps_folders.t_paths(x) - mps_folders.foldertypes(x) = UCase(item(0)) + ReDim Preserve mps_folders.foldertypes(x), mps_folders.s_paths(x), mps_folders.t_paths(x) + mps_folders.foldertypes(x) = UCase(item(0)) - ReDim Preserve process_thread(x) - process_thread(x) = New Thread(AddressOf mps_folders.folders_processing) - process_thread(x).Start(item(0)) - End If + ReDim Preserve process_thread(x) + process_thread(x) = New Thread(AddressOf mps_folders.folders_processing) + process_thread(x).Start(item(0)) + End If - Next + Next - If x <> -1 Then + If x <> -1 Then - Dim active As Boolean = True + Dim active As Boolean = True - Do Until active = False + Do Until active = False - active = False + active = False - For y As Integer = 0 To x + For y As Integer = 0 To x - If process_thread(y).IsAlive Then - active = True - Exit For - End If + If process_thread(y).IsAlive Then + active = True + Exit For + End If - Next + Next - If _bw_active_fl_jobs > 0 Then - If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] waiting for background threads to finish... " & _bw_active_fl_jobs.ToString & " threads remaining processing.", "DEBUG") - MPSync_process.wait(10, False) - End If + If _bw_active_fl_jobs > 0 Then + If MPSync_process.p_Debug Then MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] waiting for background threads to finish... " & _bw_active_fl_jobs.ToString & " threads remaining processing.", MessageType.DEBUG) + MPSync_process.wait(10, False) + End If - Loop + Loop - End If + End If + + If MPSync_settings.syncnow Then MPSync_settings.folders_complete = True - If MPSync_settings.syncnow Then MPSync_settings.folders_complete = True + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] Folders synchronization complete.", MessageType.INFO) - MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] Folders synchronization complete.", "INFO") + Catch ex As Exception + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][bw_folders_worker] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub Private Sub folders_processing(ByVal foldertype As String) - Dim folders_client As String = Nothing - Dim folders_server As String = Nothing - Dim folders() As String = Nothing - Dim folders_direction As Integer = Nothing - Dim folders_sync_method As Integer = Nothing - Dim folders_pause As Boolean = False - Dim folders_md5 As Boolean = False - Dim folders_crc32 As Boolean = False + Try + Dim folders_client As String = Nothing + Dim folders_server As String = Nothing + Dim folders() As String = Nothing + Dim folders_direction As Integer = Nothing + Dim folders_sync_method As Integer = Nothing + Dim folders_pause As Boolean = False + Dim folders_md5 As Boolean = False + Dim folders_crc32 As Boolean = False + + MPSync_process.getObjectSettings(foldertype, folders_client, folders_server, folders_direction, folders_sync_method, folders, folders_pause, folders_md5, folders_crc32) - MPSync_process.getObjectSettings(foldertype, folders_client, folders_server, folders_direction, folders_sync_method, folders, folders_pause, folders_md5, folders_crc32) + Process(UCase(foldertype), folders_client, folders_server, folders_direction, folders_sync_method, folders, folders_pause, folders_md5, folders_crc32) - Process(UCase(foldertype), folders_client, folders_server, folders_direction, folders_sync_method, folders, folders_pause, folders_md5, folders_crc32) + Catch ex As Exception + MPSync_process.logStats("MPSync: [MPSync_process.WorkMethod][folders_processing] Unexpected error " & ex.Message, MessageType.ERR) + End Try End Sub Private Sub Process(ByVal foldertype As String, ByVal clientpath As String, ByVal serverpath As String, ByVal direction As Integer, ByVal folders_sync_method As Integer, ByVal selectedfolder() As String, ByVal folders_pause As Boolean, ByVal folders_md5 As Boolean, ByVal folders_crc32 As Boolean) - MPSync_process.logStats("MPSync: [Process] " & foldertype & " synchronization cycle starting.", "LOG") + MPSync_process.logStats("MPSync: [Process] " & foldertype & " synchronization cycle starting.", MessageType.LOG) ' direction is client to server If direction <> 2 Then @@ -125,7 +132,7 @@ Public Class MPSync_process_Folders process_Folder(foldertype, serverpath, clientpath, folders_sync_method, selectedfolder, folders_pause, folders_md5, folders_crc32) End If - MPSync_process.logStats("MPSync: [Process] " & foldertype & " synchronization cycle complete.", "LOG") + MPSync_process.logStats("MPSync: [Process] " & foldertype & " synchronization cycle complete.", MessageType.LOG) _bw_active_fl_jobs -= 1 @@ -157,7 +164,7 @@ Public Class MPSync_process_Folders Dim l2 As Integer = Len(c_path) Dim x As Integer = -1 - MPSync_process.logStats("MPSync: [getobjectsDetails] Scanning folder " & path & " for objects", "LOG") + MPSync_process.logStats("MPSync: [getobjectsDetails] Scanning folder " & path & " for objects", MessageType.LOG) Try @@ -211,10 +218,10 @@ Public Class MPSync_process_Folders time2 = Now Catch ex As Exception - MPSync_process.logStats("MPSync: [getobjectsDetails] failed to read objects from folder " & path & " with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: [getobjectsDetails] failed to read objects from folder " & path & " with exception: " & ex.Message, MessageType.ERR) End Try - MPSync_process.logStats("MPSync: [getobjectsDetails] " & x.ToString & " objects found in folder " & path & " in " & DateDiff(DateInterval.Second, time1, time2).ToString & " seconds", "LOG") + MPSync_process.logStats("MPSync: [getobjectsDetails] " & x.ToString & " objects found in folder " & path & " in " & DateDiff(DateInterval.Second, time1, time2).ToString & " seconds", MessageType.LOG) Return objects @@ -223,7 +230,7 @@ Public Class MPSync_process_Folders Private Sub process_Folder(ByVal foldertype As String, ByVal source As String, ByVal target As String, ByVal folders_sync_method As Integer, ByVal selectedfolder() As String, ByVal folders_pause As Boolean, ByVal folders_md5 As Boolean, ByVal folders_crc32 As Boolean) If Not Directory.Exists(source) Then - MPSync_process.logStats("MPSync: [process_Folder] folder " & source & " does not exist", "ERROR") + MPSync_process.logStats("MPSync: [process_Folder] folder " & source & " does not exist", MessageType.ERR) Exit Sub End If @@ -257,13 +264,13 @@ Public Class MPSync_process_Folders If folders_sync_method <> 1 And t_folders(0) <> "" Then diff = t_folders.Except(s_folders, StringComparer.InvariantCultureIgnoreCase) - MPSync_process.logStats("MPSync: [process_Folder] found " & (UBound(diff.ToArray) + 1).ToString & " differences for deletion between " & source & " and " & target, "DEBUG") + MPSync_process.logStats("MPSync: [process_Folder] found " & (UBound(diff.ToArray) + 1).ToString & " differences for deletion between " & source & " and " & target, MessageType.DEBUG) If UBound(diff.ToArray) >= 0 Then If (diff.Count / t_folders.Count) <= 0.25 Then delete_Objects(t_path, diff.ToArray) Else - MPSync_process.logStats("MPSync: [process_Folder] differences for deletion exceed 25% treshold. Deletion not allowed for " & source & " and " & target, "INFO") + MPSync_process.logStats("MPSync: [process_Folder] differences for deletion exceed 25% treshold. Deletion not allowed for " & source & " and " & target, MessageType.INFO) End If End If @@ -273,14 +280,14 @@ Public Class MPSync_process_Folders If folders_sync_method <> 2 And s_folders(0) <> "" Then diff = s_folders.Except(t_folders, StringComparer.InvariantCultureIgnoreCase) - MPSync_process.logStats("MPSync: [process_Folder] found " & (UBound(diff.ToArray) + 1).ToString & " differences for addition/replacement between " & source & " and " & target, "DEBUG") + MPSync_process.logStats("MPSync: [process_Folder] found " & (UBound(diff.ToArray) + 1).ToString & " differences for addition/replacement between " & source & " and " & target, MessageType.DEBUG) If UBound(diff.ToArray) >= 0 Then copy_Objects(s_path, t_path, diff.ToArray, folders_pause) End If Catch ex As Exception - MPSync_process.logStats("MPSync: [process_Folder] process failed with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: [process_Folder] process failed with exception: " & ex.Message, MessageType.ERR) End Try If s_folders IsNot Nothing Then Array.Clear(s_folders, 0, UBound(s_folders)) @@ -300,7 +307,7 @@ Public Class MPSync_process_Folders For x = 0 To UBound(parm) - If folders_pause Then CheckPlayerActive() + If folders_pause Then checkPlayerActive() file = Split(parm(x), "|") @@ -310,7 +317,7 @@ Public Class MPSync_process_Folders If Not IO.Directory.Exists(directory) Then IO.Directory.CreateDirectory(directory) - MPSync_process.logStats("MPSync: [copy_Objects] directory missing, creating " & directory, "LOG") + MPSync_process.logStats("MPSync: [copy_Objects] directory missing, creating " & directory, MessageType.LOG) End If Else @@ -319,23 +326,23 @@ Public Class MPSync_process_Folders If Not IO.Directory.Exists(directory) Then IO.Directory.CreateDirectory(directory) - MPSync_process.logStats("MPSync: [copy_Objects] directory missing, creating " & directory, "LOG") + MPSync_process.logStats("MPSync: [copy_Objects] directory missing, creating " & directory, MessageType.LOG) End If Try If Not fileLocked(s_path & file(0), "copy_Objects") Then IO.File.Copy(s_path & file(0), t_path & file(0), True) - MPSync_process.logStats("MPSync: [copy_Objects] " & t_path & file(0) & " copied.", "DEBUG") + MPSync_process.logStats("MPSync: [copy_Objects] " & t_path & file(0) & " copied.", MessageType.DEBUG) End If Catch ex As Exception - MPSync_process.logStats("MPSync: [copy_Objects] copy failed with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: [copy_Objects] copy failed with exception: " & ex.Message, MessageType.ERR) End Try End If Next - If file(1) <> "WATCH" Then MPSync_process.logStats("MPSync: [copy_Objects] " & x.ToString & " objects added/replaced.", "LOG") + If file(1) <> "WATCH" Then MPSync_process.logStats("MPSync: [copy_Objects] " & x.ToString & " objects added/replaced.", MessageType.LOG) End Sub @@ -347,27 +354,27 @@ Public Class MPSync_process_Folders For x = 0 To UBound(parm) - CheckPlayerActive() + checkPlayerActive() file = Split(parm(x), "|") Try If file(1) = "FOLDER" Then IO.Directory.Delete(t_path & file(0)) - MPSync_process.logStats("MPSync: [delete_Objects] " & t_path & file(0) & " deleted.", "DEBUG") + MPSync_process.logStats("MPSync: [delete_Objects] " & t_path & file(0) & " deleted.", MessageType.DEBUG) Else If Not fileLocked(t_path & file(0), "[delete_Objects]") Then IO.File.Delete(t_path & file(0)) - MPSync_process.logStats("MPSync: [delete_Objects] " & t_path & file(0) & " deleted.", "DEBUG") + MPSync_process.logStats("MPSync: [delete_Objects] " & t_path & file(0) & " deleted.", MessageType.DEBUG) End If End If Catch ex As Exception - MPSync_process.logStats("MPSync: [delete_Objects] delete failed with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: [delete_Objects] delete failed with exception: " & ex.Message, MessageType.ERR) End Try Next - If file(1) <> "WATCH" Then MPSync_process.logStats("MPSync: [delete_Objects] " & x.ToString & " objects removed.", "LOG") + If file(1) <> "WATCH" Then MPSync_process.logStats("MPSync: [delete_Objects] " & x.ToString & " objects removed.", MessageType.LOG) End Sub @@ -384,12 +391,12 @@ Public Class MPSync_process_Folders Do While isFileLocked(filename) - MPSync_process.logStats("MPSync: [" & proc & "] obtaining lock on file " & filename, "DEBUG") + MPSync_process.logStats("MPSync: [" & proc & "] obtaining lock on file " & filename, MessageType.DEBUG) lock_count += 1 If lock_count = 10 Then - MPSync_process.logStats("MPSync: [" & proc & "] lock on file " & filename & "not obtained. File in use, skipping file.", "DEBUG") + MPSync_process.logStats("MPSync: [" & proc & "] lock on file " & filename & "not obtained. File in use, skipping file.", MessageType.DEBUG) Return True End If diff --git a/MPSync/MPSync/MPSync_process_Folders_watch.vb b/MPSync/MPSync/MPSync_process_Folders_watch.vb index 3274451..39f7de6 100644 --- a/MPSync/MPSync/MPSync_process_Folders_watch.vb +++ b/MPSync/MPSync/MPSync_process_Folders_watch.vb @@ -1,5 +1,4 @@ Imports System.IO -Imports System.Threading Class MPSync_process_Folders_watch @@ -14,7 +13,7 @@ Class MPSync_process_Folders_watch Public Sub watch_folder(ByVal path As String, ByVal foldertype As String, ByVal spath As String, ByVal tpath As String, ByVal selectedfolder() As String) If Not Directory.Exists(path) Then - MPSync_process.logStats("MPSync: [watch_folder] folder " & path & " does not exist", "ERROR") + MPSync_process.logStats("MPSync: [watch_folder] folder " & path & " does not exist", MessageType.ERR) Exit Sub End If @@ -26,7 +25,7 @@ Class MPSync_process_Folders_watch watchfolder = New System.IO.FileSystemWatcher() - MPSync_process.logStats("MPSync: " & foldertype & " watch starting for " & path, "LOG") + MPSync_process.logStats("MPSync: " & foldertype & " watch starting for " & path, MessageType.LOG) 'this is the path we want to monitor watchfolder.Path = path @@ -44,9 +43,6 @@ Class MPSync_process_Folders_watch 'Set this property to true to start watching watchfolder.EnableRaisingEvents = True - Dim autoEvent As New AutoResetEvent(False) - autoEvent.WaitOne() - End Sub Private Sub fileChange(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs) @@ -78,7 +74,7 @@ Class MPSync_process_Folders_watch End If End If Catch ex As Exception - MPSync_process.logStats("MPSync: fileChange failed on " & e.FullPath & " with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: fileChange failed on " & e.FullPath & " with exception: " & ex.Message, MessageType.ERR) End Try End Sub @@ -99,12 +95,12 @@ Class MPSync_process_Folders_watch If selected_folder.Contains(folder) Or selected_folder.Contains("ALL") Then If MPSync_process_Folders.fileLocked(e.OldFullPath, "filerename") Then - MPSync_process.logStats("MPSync: " & folder_type & " - " & e.OldFullPath & " renamed to " & e.FullPath, "LOG") + MPSync_process.logStats("MPSync: " & folder_type & " - " & e.OldFullPath & " renamed to " & e.FullPath, MessageType.LOG) FileSystem.Rename(e.OldFullPath, e.FullPath) End If End If Catch ex As Exception - MPSync_process.logStats("MPSync: rename failed with exception: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: rename failed with exception: " & ex.Message, MessageType.ERR) End Try End Sub diff --git a/MPSync/MPSync/MPSync_settings.Designer.vb b/MPSync/MPSync/MPSync_settings.Designer.vb index 7c1fefb..c1b3cae 100644 --- a/MPSync/MPSync/MPSync_settings.Designer.vb +++ b/MPSync/MPSync/MPSync_settings.Designer.vb @@ -1,9 +1,9 @@ - _ + Partial Class MPSync_settings Inherits System.Windows.Forms.Form 'Form overrides dispose to clean up the component list. - _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then @@ -20,7 +20,7 @@ Partial Class MPSync_settings 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified imports the Windows Form Designer. 'Do not modify it imports the code editor. - _ + Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MPSync_settings)) @@ -48,18 +48,8 @@ Partial Class MPSync_settings Me.Label14 = New System.Windows.Forms.Label() Me.Label13 = New System.Windows.Forms.Label() Me.nud_max_DB_streams = New System.Windows.Forms.NumericUpDown() - Me.Panel6 = New System.Windows.Forms.Panel() - Me.rb_process = New System.Windows.Forms.RadioButton() - Me.rb_normal = New System.Windows.Forms.RadioButton() Me.Panel2 = New System.Windows.Forms.Panel() Me.cb_debug = New System.Windows.Forms.CheckBox() - Me.tp_process = New System.Windows.Forms.TabPage() - Me.b_removeautostart = New System.Windows.Forms.Button() - Me.b_processauto = New System.Windows.Forms.Button() - Me.b_processstop = New System.Windows.Forms.Button() - Me.b_processstart = New System.Windows.Forms.Button() - Me.tb_processstatus = New System.Windows.Forms.TextBox() - Me.Label7 = New System.Windows.Forms.Label() Me.tp_database = New System.Windows.Forms.TabPage() Me.tc_database = New System.Windows.Forms.TabControl() Me.tp_db_paths = New System.Windows.Forms.TabPage() @@ -103,8 +93,6 @@ Partial Class MPSync_settings Me.tp_folders = New System.Windows.Forms.TabPage() Me.tc_objects = New System.Windows.Forms.TabControl() Me.tp_list = New System.Windows.Forms.TabPage() - Me.pnl_object_list = New System.Windows.Forms.Panel() - Me.tb_object_list = New System.Windows.Forms.TextBox() Me.b_delete = New System.Windows.Forms.Button() Me.b_edit = New System.Windows.Forms.Button() Me.b_add = New System.Windows.Forms.Button() @@ -143,9 +131,7 @@ Partial Class MPSync_settings Me.Panel7.SuspendLayout() CType(Me.nud_max_folder_streams, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.nud_max_DB_streams, System.ComponentModel.ISupportInitialize).BeginInit() - Me.Panel6.SuspendLayout() Me.Panel2.SuspendLayout() - Me.tp_process.SuspendLayout() Me.tp_database.SuspendLayout() Me.tc_database.SuspendLayout() Me.tp_db_paths.SuspendLayout() @@ -161,7 +147,6 @@ Partial Class MPSync_settings Me.tp_folders.SuspendLayout() Me.tc_objects.SuspendLayout() Me.tp_list.SuspendLayout() - Me.pnl_object_list.SuspendLayout() Me.tp_paths.SuspendLayout() Me.tp_advancedsettings.SuspendLayout() Me.GroupBox2.SuspendLayout() @@ -242,7 +227,6 @@ Partial Class MPSync_settings ' Me.tc_settings.Controls.Add(Me.tp_selection) Me.tc_settings.Controls.Add(Me.tp_configuration) - Me.tc_settings.Controls.Add(Me.tp_process) Me.tc_settings.Location = New System.Drawing.Point(3, 7) Me.tc_settings.Name = "tc_settings" Me.tc_settings.SelectedIndex = 0 @@ -353,7 +337,6 @@ Partial Class MPSync_settings ' Me.tp_configuration.BackColor = System.Drawing.SystemColors.ButtonFace Me.tp_configuration.Controls.Add(Me.Panel7) - Me.tp_configuration.Controls.Add(Me.Panel6) Me.tp_configuration.Controls.Add(Me.Panel2) Me.tp_configuration.Location = New System.Drawing.Point(4, 22) Me.tp_configuration.Name = "tp_configuration" @@ -425,42 +408,6 @@ Partial Class MPSync_settings Me.nud_max_DB_streams.TabIndex = 0 Me.nud_max_DB_streams.TextAlign = System.Windows.Forms.HorizontalAlignment.Center ' - 'Panel6 - ' - Me.Panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel6.Controls.Add(Me.rb_process) - Me.Panel6.Controls.Add(Me.rb_normal) - Me.Panel6.Location = New System.Drawing.Point(12, 135) - Me.Panel6.Name = "Panel6" - Me.Panel6.Size = New System.Drawing.Size(545, 71) - Me.Panel6.TabIndex = 72 - Me.Panel6.Visible = False - ' - 'rb_process - ' - Me.rb_process.AutoSize = True - Me.rb_process.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rb_process.Location = New System.Drawing.Point(158, 37) - Me.rb_process.Name = "rb_process" - Me.rb_process.Size = New System.Drawing.Size(189, 20) - Me.rb_process.TabIndex = 74 - Me.rb_process.Text = "Run as a Windows process" - Me.rb_process.UseVisualStyleBackColor = True - Me.rb_process.Visible = False - ' - 'rb_normal - ' - Me.rb_normal.AutoSize = True - Me.rb_normal.Checked = True - Me.rb_normal.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rb_normal.Location = New System.Drawing.Point(158, 11) - Me.rb_normal.Name = "rb_normal" - Me.rb_normal.Size = New System.Drawing.Size(227, 20) - Me.rb_normal.TabIndex = 72 - Me.rb_normal.TabStop = True - Me.rb_normal.Text = "Run from MediaPortal or Manually" - Me.rb_normal.UseVisualStyleBackColor = True - ' 'Panel2 ' Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle @@ -481,83 +428,6 @@ Partial Class MPSync_settings Me.cb_debug.Text = "Enable DEBUG logs" Me.cb_debug.UseVisualStyleBackColor = True ' - 'tp_process - ' - Me.tp_process.BackColor = System.Drawing.SystemColors.ButtonFace - Me.tp_process.Controls.Add(Me.b_removeautostart) - Me.tp_process.Controls.Add(Me.b_processauto) - Me.tp_process.Controls.Add(Me.b_processstop) - Me.tp_process.Controls.Add(Me.b_processstart) - Me.tp_process.Controls.Add(Me.tb_processstatus) - Me.tp_process.Controls.Add(Me.Label7) - Me.tp_process.Location = New System.Drawing.Point(4, 22) - Me.tp_process.Name = "tp_process" - Me.tp_process.Padding = New System.Windows.Forms.Padding(3) - Me.tp_process.Size = New System.Drawing.Size(568, 152) - Me.tp_process.TabIndex = 2 - Me.tp_process.Text = "Process" - ' - 'b_removeautostart - ' - Me.b_removeautostart.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.b_removeautostart.Location = New System.Drawing.Point(177, 93) - Me.b_removeautostart.Name = "b_removeautostart" - Me.b_removeautostart.Size = New System.Drawing.Size(214, 23) - Me.b_removeautostart.TabIndex = 10 - Me.b_removeautostart.Text = "Remove Process from AutoStart" - Me.b_removeautostart.UseVisualStyleBackColor = True - ' - 'b_processauto - ' - Me.b_processauto.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.b_processauto.Location = New System.Drawing.Point(177, 66) - Me.b_processauto.Name = "b_processauto" - Me.b_processauto.Size = New System.Drawing.Size(214, 23) - Me.b_processauto.TabIndex = 9 - Me.b_processauto.Text = "Set Process to AutoStart" - Me.b_processauto.UseVisualStyleBackColor = True - ' - 'b_processstop - ' - Me.b_processstop.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.b_processstop.Location = New System.Drawing.Point(177, 39) - Me.b_processstop.Name = "b_processstop" - Me.b_processstop.Size = New System.Drawing.Size(214, 23) - Me.b_processstop.TabIndex = 7 - Me.b_processstop.Text = "Stop Process" - Me.b_processstop.UseVisualStyleBackColor = True - ' - 'b_processstart - ' - Me.b_processstart.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.b_processstart.Location = New System.Drawing.Point(177, 12) - Me.b_processstart.Name = "b_processstart" - Me.b_processstart.Size = New System.Drawing.Size(214, 23) - Me.b_processstart.TabIndex = 6 - Me.b_processstart.Text = "Start Process now" - Me.b_processstart.UseVisualStyleBackColor = True - ' - 'tb_processstatus - ' - Me.tb_processstatus.BackColor = System.Drawing.SystemColors.ButtonFace - Me.tb_processstatus.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.tb_processstatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.tb_processstatus.ForeColor = System.Drawing.Color.Red - Me.tb_processstatus.Location = New System.Drawing.Point(280, 123) - Me.tb_processstatus.Name = "tb_processstatus" - Me.tb_processstatus.Size = New System.Drawing.Size(195, 15) - Me.tb_processstatus.TabIndex = 4 - ' - 'Label7 - ' - Me.Label7.AutoSize = True - Me.Label7.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label7.Location = New System.Drawing.Point(174, 122) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(100, 16) - Me.Label7.TabIndex = 3 - Me.Label7.Text = "Service Status :" - ' 'tp_database ' Me.tp_database.BackColor = System.Drawing.SystemColors.ButtonFace @@ -1020,7 +890,6 @@ Partial Class MPSync_settings 'tp_list ' Me.tp_list.BackColor = System.Drawing.SystemColors.ButtonFace - Me.tp_list.Controls.Add(Me.pnl_object_list) Me.tp_list.Controls.Add(Me.b_delete) Me.tp_list.Controls.Add(Me.b_edit) Me.tp_list.Controls.Add(Me.b_add) @@ -1032,45 +901,27 @@ Partial Class MPSync_settings Me.tp_list.TabIndex = 2 Me.tp_list.Text = "Folders List" ' - 'pnl_object_list - ' - Me.pnl_object_list.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnl_object_list.Controls.Add(Me.tb_object_list) - Me.pnl_object_list.Location = New System.Drawing.Point(44, 68) - Me.pnl_object_list.Name = "pnl_object_list" - Me.pnl_object_list.Size = New System.Drawing.Size(406, 49) - Me.pnl_object_list.TabIndex = 4 - Me.pnl_object_list.Visible = False - ' - 'tb_object_list - ' - Me.tb_object_list.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.tb_object_list.Location = New System.Drawing.Point(14, 14) - Me.tb_object_list.Name = "tb_object_list" - Me.tb_object_list.Size = New System.Drawing.Size(378, 21) - Me.tb_object_list.TabIndex = 0 - ' 'b_delete ' - Me.b_delete.BackgroundImage = Global.MPSync.My.Resources.Resources.delete Me.b_delete.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.b_delete.Enabled = False + Me.b_delete.Image = Global.MPSync.My.Resources.Resources.delete Me.b_delete.Location = New System.Drawing.Point(506, 72) Me.b_delete.Name = "b_delete" Me.b_delete.Size = New System.Drawing.Size(40, 40) Me.b_delete.TabIndex = 3 Me.b_delete.UseVisualStyleBackColor = True - Me.b_delete.Visible = False ' 'b_edit ' - Me.b_edit.BackgroundImage = Global.MPSync.My.Resources.Resources.edit Me.b_edit.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.b_edit.Enabled = False + Me.b_edit.Image = Global.MPSync.My.Resources.Resources.edit Me.b_edit.Location = New System.Drawing.Point(506, 118) Me.b_edit.Name = "b_edit" Me.b_edit.Size = New System.Drawing.Size(40, 40) Me.b_edit.TabIndex = 2 Me.b_edit.UseVisualStyleBackColor = True - Me.b_edit.Visible = False ' 'b_add ' @@ -1350,12 +1201,8 @@ Partial Class MPSync_settings Me.Panel7.PerformLayout() CType(Me.nud_max_folder_streams, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.nud_max_DB_streams, System.ComponentModel.ISupportInitialize).EndInit() - Me.Panel6.ResumeLayout(False) - Me.Panel6.PerformLayout() Me.Panel2.ResumeLayout(False) Me.Panel2.PerformLayout() - Me.tp_process.ResumeLayout(False) - Me.tp_process.PerformLayout() Me.tp_database.ResumeLayout(False) Me.tc_database.ResumeLayout(False) Me.tp_db_paths.ResumeLayout(False) @@ -1380,8 +1227,6 @@ Partial Class MPSync_settings Me.tp_folders.ResumeLayout(False) Me.tc_objects.ResumeLayout(False) Me.tp_list.ResumeLayout(False) - Me.pnl_object_list.ResumeLayout(False) - Me.pnl_object_list.PerformLayout() Me.tp_paths.ResumeLayout(False) Me.tp_paths.PerformLayout() Me.tp_advancedsettings.ResumeLayout(False) @@ -1464,8 +1309,6 @@ Partial Class MPSync_settings Friend WithEvents b_delete As System.Windows.Forms.Button Friend WithEvents b_edit As System.Windows.Forms.Button Friend WithEvents b_add As System.Windows.Forms.Button - Friend WithEvents pnl_object_list As System.Windows.Forms.Panel - Friend WithEvents tb_object_list As System.Windows.Forms.TextBox Friend WithEvents b_apply As System.Windows.Forms.Button Friend WithEvents tc_settings As System.Windows.Forms.TabControl Friend WithEvents tp_selection As System.Windows.Forms.TabPage @@ -1478,19 +1321,9 @@ Partial Class MPSync_settings Friend WithEvents rb_timestamp As System.Windows.Forms.RadioButton Friend WithEvents rb_triggers As System.Windows.Forms.RadioButton Friend WithEvents tp_configuration As System.Windows.Forms.TabPage - Friend WithEvents Panel6 As System.Windows.Forms.Panel - Friend WithEvents rb_process As System.Windows.Forms.RadioButton - Friend WithEvents rb_normal As System.Windows.Forms.RadioButton Friend WithEvents Panel2 As System.Windows.Forms.Panel Friend WithEvents cb_debug As System.Windows.Forms.CheckBox - Friend WithEvents tp_process As System.Windows.Forms.TabPage - Friend WithEvents tb_processstatus As System.Windows.Forms.TextBox - Friend WithEvents Label7 As System.Windows.Forms.Label - Friend WithEvents b_processstart As System.Windows.Forms.Button - Friend WithEvents b_processauto As System.Windows.Forms.Button - Friend WithEvents b_processstop As System.Windows.Forms.Button Friend WithEvents cb_vacuum As System.Windows.Forms.CheckBox - Friend WithEvents b_removeautostart As System.Windows.Forms.Button Friend WithEvents tt_folders_md5 As System.Windows.Forms.ToolTip Friend WithEvents cb_folders_crc32 As System.Windows.Forms.CheckBox Friend WithEvents cb_folders_md5 As System.Windows.Forms.CheckBox diff --git a/MPSync/MPSync/MPSync_settings.vb b/MPSync/MPSync/MPSync_settings.vb index d4067ea..503da52 100644 --- a/MPSync/MPSync/MPSync_settings.vb +++ b/MPSync/MPSync/MPSync_settings.vb @@ -1,11 +1,12 @@ Imports MediaPortal.Configuration +Imports System.Reflection Imports MediaPortal.GUI.Library Imports System.Xml Public Class MPSync_settings - Dim _curversion As String = "1.0.0.22" + Dim _curversion As String = Assembly.GetExecutingAssembly().GetName().Version.ToString() Dim i_direction(2) As Image Dim i_method(2), _databases, _folders, _watched_dbs, _object_list, _db_objects, _version, _session, _sync_type As String Dim _db_sync_method, _folders_sync_method As Integer @@ -26,22 +27,24 @@ Public Class MPSync_settings Public i_watched(3) As Watched - Public WriteOnly Property SetWatched - Set(value) - i_watched(0).database = "movingpictures.db3" - i_watched(0).tables = {"user_movie_settings", "movie_info"} - i_watched(1).database = "MusicDatabaseV13.db3" - i_watched(1).tables = {"tracks"} - i_watched(2).database = "TVSeriesDatabase4.db3" - i_watched(2).tables = {"local_episodes", "online_episodes", "online_series", "season"} - i_watched(3).database = "VideoDatabaseV5.db3" - i_watched(3).tables = {"bookmark", "movie", "resume"} - End Set - End Property + Public Shared Function GetConfigFileName() As String + Return Config.GetFile(Config.Dir.Config, "MPSync.xml") + End Function + + Public Sub SetWatched() + i_watched(0).database = "movingpictures.db3" + i_watched(0).tables = {"user_movie_settings", "movie_info"} + i_watched(1).database = "MusicDatabaseV13.db3" + i_watched(1).tables = {"tracks"} + i_watched(2).database = "TVSeriesDatabase4.db3" + i_watched(2).tables = {"local_episodes", "online_episodes", "online_series", "season"} + i_watched(3).database = "VideoDatabaseV5.db3" + i_watched(3).tables = {"bookmark", "movie", "resume"} + End Sub - Public ReadOnly Property getDatabase As Array + Public ReadOnly Property getDatabase As String() Get - If i_watched(0).database = Nothing Then SetWatched = Nothing + If i_watched(0).database = Nothing Then SetWatched() Dim database(UBound(i_watched)) As String For x As Integer = 0 To UBound(i_watched) database(x) = i_watched(x).database @@ -52,7 +55,7 @@ Public Class MPSync_settings Public ReadOnly Property getTables(ByVal database As String) As Array Get - If i_watched(0).database = Nothing Then SetWatched = Nothing + If i_watched(0).database = Nothing Then SetWatched() Dim y As Integer = Array.IndexOf(getDatabase, database) If y <> -1 Then Dim tables(UBound(i_watched(y).tables)) As String @@ -72,8 +75,8 @@ Public Class MPSync_settings If Microsoft.VisualBasic.Right(object_list, 1) = "|" Then object_list = Microsoft.VisualBasic.Left(object_list, Len(object_list) - 1) - Dim item As Array - Dim list As Array = Split(object_list, "|") + Dim item As String() + Dim list As String() = Split(object_list, "|") For Each obj As String In list @@ -133,7 +136,7 @@ Public Class MPSync_settings End If b_sync_now.Enabled = True Catch ex As Exception - MPSync_process.logStats("MPSync: " & ex.Message, "ERROR") + MPSync_process.logStats("MPSync: " & ex.Message, MessageType.ERR) b_sync_now.Enabled = False End Try @@ -158,18 +161,38 @@ Public Class MPSync_settings End Sub + Public Shared Sub MergeSettings() + Dim fileName As String = Config.GetFile(Config.Dir.Config, "MPSync_THUMBS.xml") + If IO.File.Exists(fileName) Then + Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(fileName), + XmlWriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(GetConfigFileName) + + + XmlWriter.SetValue("Thumbs Path", "direction", XMLreader.GetValueAsInt("Path", "direction", 1)) + XmlWriter.SetValue("Thumbs Path", "client", XMLreader.GetValueAsString("Path", "client", Nothing)) + XmlWriter.SetValue("Thumbs Path", "server", XMLreader.GetValueAsString("Path", "server", Nothing)) + XmlWriter.SetValue("Thumbs Path", "method", XMLreader.GetValueAsInt("Path", "method", 0)) + XmlWriter.SetValue("Thumbs Settings", "folders", XMLreader.GetValueAsString("Settings", "folders", Nothing)) + XmlWriter.SetValue("Thumbs Settings", "pause while playing", XMLreader.GetValueAsBool("Settings", "pause while playing", False)) + XmlWriter.SetValue("Thumbs Settings", "use MD5", XMLreader.GetValueAsBool("Settings", "use MD5", False)) + XmlWriter.SetValue("Thumbs Settings", "use CRC32", XMLreader.GetValueAsBool("Settings", "use CRC32", False)) + End Using + MediaPortal.Profile.Settings.SaveCache() + IO.File.Delete(fileName) + End If + End Sub Private Sub getObjectSettings(ByVal objsetting As String) - Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) + Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) - _clicks_folders = XMLreader.GetValueAsInt("Path", "direction", 1) - tb_folders_client_path.Text = XMLreader.GetValueAsString("Path", "client", Nothing) - tb_folders_server_path.Text = XMLreader.GetValueAsString("Path", "server", Nothing) - _folders_sync_method = XMLreader.GetValueAsInt("Path", "method", 0) - _folders = XMLreader.GetValueAsString("Settings", "folders", Nothing) - cb_folders_pause.Checked = XMLreader.GetValueAsString("Settings", "pause while playing", False) - cb_folders_md5.Checked = XMLreader.GetValueAsString("Settings", "use MD5", False) - cb_folders_crc32.Checked = XMLreader.GetValueAsString("Settings", "use CRC32", False) + _clicks_folders = XMLreader.GetValueAsInt(objsetting & " Path", "direction", 1) + tb_folders_client_path.Text = XMLreader.GetValueAsString(objsetting & " Path", "client", Nothing) + tb_folders_server_path.Text = XMLreader.GetValueAsString(objsetting & " Path", "server", Nothing) + _folders_sync_method = XMLreader.GetValueAsInt(objsetting & " Path", "method", 0) + _folders = XMLreader.GetValueAsString(objsetting & " Settings", "folders", Nothing) + cb_folders_pause.Checked = CBool(XMLreader.GetValueAsString(objsetting & " Settings", "pause while playing", False.ToString())) + cb_folders_md5.Checked = CBool(XMLreader.GetValueAsString(objsetting & " Settings", "use MD5", False.ToString())) + cb_folders_crc32.Checked = CBool(XMLreader.GetValueAsString(objsetting & " Settings", "use CRC32", False.ToString())) End Using @@ -191,13 +214,6 @@ Public Class MPSync_settings Private Sub setObjectSettings(ByVal objsetting As String) - If _version <> _curversion Then - If IO.File.Exists(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) Then - IO.File.Delete(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) - MediaPortal.Profile.Settings.ClearCache() - End If - End If - _folders = Nothing If rb_specific_folders.Checked Then @@ -206,17 +222,17 @@ Public Class MPSync_settings Next End If - Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) + Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) - XMLwriter.SetValue("Path", "client", tb_folders_client_path.Text) - XMLwriter.SetValue("Path", "server", tb_folders_server_path.Text) - XMLwriter.SetValue("Path", "direction", _clicks_folders.ToString) - XMLwriter.SetValue("Path", "method", Array.IndexOf(i_method, cb_folders_sync_method.Text)) + XMLwriter.SetValue(objsetting & " Path", "client", tb_folders_client_path.Text) + XMLwriter.SetValue(objsetting & " Path", "server", tb_folders_server_path.Text) + XMLwriter.SetValue(objsetting & " Path", "direction", _clicks_folders.ToString) + XMLwriter.SetValue(objsetting & " Path", "method", Array.IndexOf(i_method, cb_folders_sync_method.Text)) - XMLwriter.SetValue("Settings", "pause while playing", cb_folders_pause.Checked) - XMLwriter.SetValue("Settings", "use MD5", cb_folders_md5.Checked) - XMLwriter.SetValue("Settings", "use CRC32", cb_folders_crc32.Checked) - XMLwriter.SetValue("Settings", "folders", _folders) + XMLwriter.SetValue(objsetting & " Settings", "pause while playing", cb_folders_pause.Checked) + XMLwriter.SetValue(objsetting & " Settings", "use MD5", cb_folders_md5.Checked) + XMLwriter.SetValue(objsetting & " Settings", "use CRC32", cb_folders_crc32.Checked) + XMLwriter.SetValue(objsetting & " Settings", "folders", _folders) End Using @@ -224,25 +240,15 @@ Public Class MPSync_settings End Sub - Private Sub deleteObjectSettings(ByVal objsetting As String) - - If IO.File.Exists(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) Then - IO.File.Delete(Config.GetFile(Config.Dir.Config, "MPSync_" & UCase(objsetting) & ".xml")) - End If - - MediaPortal.Profile.Settings.ClearCache() - - End Sub - Private Sub getSettings() Dim object_list As String = Nothing - If IO.File.Exists(Config.GetFile(Config.Dir.Config, "MPSync.xml")) Then + If IO.File.Exists(MPSync_settings.GetConfigFileName) Then ' get settings from XML configuration file - Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLreader As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) _version = XMLreader.GetValueAsString("Plugin", "version", "0") cb_databases.Checked = XMLreader.GetValueAsBool("Plugin", "databases", True) @@ -308,18 +314,6 @@ Public Class MPSync_settings populate_watchedchecklistbox(clb_watched) populate_objectcheckedlistbox(clb_object_list, object_list) - 'check if process is running - 'If isProcessRunning() Then tb_processstatus.Text = "RUNNING" Else tb_processstatus.Text = "STOPPED" - - 'check if process is set to autostart - 'b_processauto.Enabled = Not isProcessAuto() - 'b_removeautostart.Enabled = Not b_processauto.Enabled - - 'rb_normal.Checked = b_processauto.Enabled - 'rb_process.Checked = Not b_processauto.Enabled - - If b_processauto.Enabled And tc_settings.TabPages.Contains(tp_process) Then tc_settings.TabPages.Remove(tp_process) - End Sub Private Sub setSettings() @@ -374,7 +368,7 @@ Public Class MPSync_settings _object_list += clb_object_list.GetItemText(clb_object_list.Items(x)) & "¬" & clb_object_list.GetItemChecked(x) & "|" Next - Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) XMLwriter.SetValue("Plugin", "version", _curversion) XMLwriter.SetValueAsBool("Plugin", "databases", cb_databases.Checked) @@ -585,7 +579,7 @@ Public Class MPSync_settings clb_objects.Enabled = rb_specific_folders.Checked End Sub - Private Sub tb_object_list_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles tb_object_list.KeyPress + Private Sub tb_object_list_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) If e.KeyChar = Chr(13) Then SendKeys.Send(vbTab) @@ -595,20 +589,11 @@ Public Class MPSync_settings Private Sub b_add_Click(sender As Object, e As EventArgs) Handles b_add.Click - pnl_object_list.Visible = True - - tb_object_list.Text = Nothing - tb_object_list.Focus() - - Do While tb_object_list.Focused - Threading.Thread.Sleep(50) - Application.DoEvents() - Loop - - clb_object_list.Items.Add(tb_object_list.Text, False) - clb_object_list.TopIndex = clb_object_list.Items.Count - 1 - tb_object_list.Text = Nothing - pnl_object_list.Visible = False + Dim s As String = InputBox("Name:", "Add folder item") + If s <> "" Then + clb_object_list.Items.Add(s, False) + clb_object_list.TopIndex = clb_object_list.Items.Count - 1 + End If End Sub @@ -616,12 +601,14 @@ Public Class MPSync_settings If MsgBox("Are you sure?", MsgBoxStyle.YesNo, "Delete") = MsgBoxResult.Yes Then - deleteObjectSettings(clb_object_list.SelectedItem) clb_object_list.Items.Remove(clb_object_list.SelectedItem) clb_object_list.SelectedItem = Nothing - b_delete.Visible = False - b_edit.Visible = False + b_delete.Enabled = False + b_edit.Enabled = False + + tc_objects.TabPages.Remove(tp_paths) + tc_objects.TabPages.Remove(tp_advancedsettings) End If @@ -656,9 +643,9 @@ Public Class MPSync_settings Private Sub clb_object_list_SelectedIndexChanged(sender As Object, e As EventArgs) Handles clb_object_list.SelectedIndexChanged - If clb_object_list.SelectedItem <> Nothing Then - b_delete.Visible = True - b_edit.Visible = True + If clb_object_list.SelectedItem IsNot Nothing Then + b_delete.Enabled = True + b_edit.Enabled = True End If End Sub @@ -687,21 +674,6 @@ Public Class MPSync_settings clb_watched.Enabled = rb_w_specific.Checked End Sub - Private Sub rb_process_CheckedChanged(sender As Object, e As EventArgs) Handles rb_process.CheckedChanged - b_sync_now.Enabled = Not rb_process.Checked - - If rb_process.Checked Then - If Not tc_settings.TabPages.Contains(tp_process) Then tc_settings.TabPages.Add(tp_process) - Else - If tc_settings.TabPages.Contains(tp_process) Then tc_settings.TabPages.Remove(tp_process) - End If - End Sub - - Private Sub rb_normal_CheckedChanged(sender As Object, e As EventArgs) Handles rb_normal.CheckedChanged - If isProcessAuto() Then b_removeautostart_Click(Nothing, Nothing) - If isProcessRunning() Then b_processstop_Click(Nothing, Nothing) - End Sub - Private Sub cb_folders_md5_CheckedChanged(sender As Object, e As EventArgs) Handles cb_folders_md5.CheckedChanged If cb_folders_md5.Checked Then cb_folders_crc32.Checked = False End Sub @@ -710,47 +682,6 @@ Public Class MPSync_settings If cb_folders_crc32.Checked Then cb_folders_md5.Checked = False End Sub - Private Function isProcessRunning(Optional ByVal wait As Boolean = True) As Boolean - - If wait Then - Me.Cursor = Cursors.WaitCursor - MPSync_process.wait(3, False) - Me.Cursor = Cursors.Default - End If - - Try - For Each clsProcess As Process In Process.GetProcesses() - If clsProcess.ProcessName = "MPSync_Process" Then - Return True - End If - Next - Catch ex As Exception - End Try - - Return False - - End Function - - Private Sub b_processstart_Click(sender As Object, e As EventArgs) Handles b_processstart.Click - - If isProcessRunning() Then Exit Sub - - Dim process As New Process() - - process.StartInfo.UseShellExecute = True - process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden - process.StartInfo.FileName = Config.GetFile(Config.Dir.Base, "MPSync_Process.exe") - - Try - process.Start() - Catch ex As Exception - MsgBox("MPSync Process not started", MsgBoxStyle.OkOnly, "Start Process") - End Try - - If isProcessRunning() Then tb_processstatus.Text = "RUNNING" Else tb_processstatus.Text = "STOPPED" - - End Sub - Private Sub nud_max_streams_ValueChanged(sender As Object, e As EventArgs) Handles nud_max_DB_streams.ValueChanged If nud_max_DB_streams.Value = 0 Then max_DB_threads = -1 Else max_DB_threads = nud_max_DB_streams.Value End Sub @@ -759,63 +690,6 @@ Public Class MPSync_settings If nud_max_folder_streams.Value = 0 Then max_folder_threads = -1 Else max_folder_threads = nud_max_folder_streams.Value End Sub - Private Sub b_processstop_Click(sender As Object, e As EventArgs) Handles b_processstop.Click - - Dim ObjW As Object - Dim ObjP As Object - Dim ObjP2 As Object - - Try - ObjW = GetObject("winmgmts://.") - ObjP = ObjW.execquery("Select * from win32_Process") - For Each ObjP2 In ObjP - If ObjP2.Name = "MPSync_Process.exe" Then ObjP2.Terminate() - Next - Catch ex As Exception - MsgBox("MPSync Process not stopped", MsgBoxStyle.OkOnly, "Stop Process") - End Try - - If isProcessRunning() Then tb_processstatus.Text = "RUNNING" Else tb_processstatus.Text = "STOPPED" - - End Sub - - Private Function isProcessAuto() As Boolean - - Dim status As Boolean = False - Dim regKey As Microsoft.Win32.RegistryKey - - regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) - status = Not (regKey.GetValue("MPSync_Process") = Nothing) - regKey.Close() - - Return status - - End Function - - Private Sub b_processauto_Click(sender As Object, e As EventArgs) Handles b_processauto.Click - Dim regKey As Microsoft.Win32.RegistryKey - regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) - regKey.SetValue("MPSync_Process", """" & Config.GetFile(Config.Dir.Base, "MPSync_Process.exe") & """") - regKey.Close() - b_processauto.Enabled = False - b_removeautostart.Enabled = True - End Sub - - Private Sub b_removeautostart_Click(sender As Object, e As EventArgs) Handles b_removeautostart.Click - Dim regKey As Microsoft.Win32.RegistryKey - regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) - regKey.DeleteValue("MPSync_Process", False) - regKey.Close() - b_processauto.Enabled = True - b_removeautostart.Enabled = False - End Sub - - Private Sub tb_servicestatus_TextChanged(sender As Object, e As EventArgs) Handles tb_processstatus.TextChanged - b_processstart.Enabled = (tb_processstatus.Text.Contains("STOP") Or tb_processstatus.Text = "N/A") - b_processstop.Enabled = (Not tb_processstatus.Text.Contains("STOP") And tb_processstatus.Text <> "N/A") - If b_processstop.Enabled Then SyncNowStatus() - End Sub - Private Sub b_sync_now_Click(sender As Object, e As EventArgs) Handles b_sync_now.Click setSettings() @@ -891,7 +765,7 @@ Public Class MPSync_settings Private Sub MPSync_settings_FormClosed(sender As Object, e As EventArgs) Handles MyBase.FormClosed - Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MPSync.xml")) + Using XMLwriter As MediaPortal.Profile.Settings = New MediaPortal.Profile.Settings(MPSync_settings.GetConfigFileName) XMLwriter.SetValue("Plugin", "version", _curversion) End Using @@ -932,4 +806,4 @@ Public Class MPSync_settings End Sub -End Class \ No newline at end of file +End Class diff --git a/MPSync/MPSync/My Project/AssemblyInfo.vb b/MPSync/MPSync/My Project/AssemblyInfo.vb index 3f9dd5e..100155f 100644 --- a/MPSync/MPSync/My Project/AssemblyInfo.vb +++ b/MPSync/MPSync/My Project/AssemblyInfo.vb @@ -13,7 +13,7 @@ Imports MediaPortal.Common.Utils - + @@ -37,5 +37,5 @@ Imports MediaPortal.Common.Utils ' by using the '*' as shown below: ' - - + + diff --git a/MPSync/MPSync/bin/Debug/DirectoryEnumerator.dll b/MPSync/MPSync/bin/Debug/DirectoryEnumerator.dll deleted file mode 100644 index 7285fa8..0000000 Binary files a/MPSync/MPSync/bin/Debug/DirectoryEnumerator.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Debug/DirectoryEnumerator.pdb b/MPSync/MPSync/bin/Debug/DirectoryEnumerator.pdb deleted file mode 100644 index 80a1749..0000000 Binary files a/MPSync/MPSync/bin/Debug/DirectoryEnumerator.pdb and /dev/null differ diff --git a/MPSync/MPSync/bin/Debug/MPSync.exe b/MPSync/MPSync/bin/Debug/MPSync.exe deleted file mode 100644 index f196cc6..0000000 Binary files a/MPSync/MPSync/bin/Debug/MPSync.exe and /dev/null differ diff --git a/MPSync/MPSync/bin/Debug/MPSync.exe.config b/MPSync/MPSync/bin/Debug/MPSync.exe.config deleted file mode 100644 index e8a46ec..0000000 --- a/MPSync/MPSync/bin/Debug/MPSync.exe.config +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MPSync/MPSync/bin/Debug/MPSync.pdb b/MPSync/MPSync/bin/Debug/MPSync.pdb deleted file mode 100644 index 0906c1d..0000000 Binary files a/MPSync/MPSync/bin/Debug/MPSync.pdb and /dev/null differ diff --git a/MPSync/MPSync/bin/Debug/MPSync.xml b/MPSync/MPSync/bin/Debug/MPSync.xml deleted file mode 100644 index a1bc859..0000000 --- a/MPSync/MPSync/bin/Debug/MPSync.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - -MPSync - - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - If the plugin should have it's own button on the main menu of MediaPortal then it - should return true to this method, otherwise if it should not be on home - it should return false - - text the button should have - image for the button, or empty for default - image for the button, or empty for default - subpicture for the button or empty for none - true : plugin needs it's own button on home - false : plugin does not need it's own button on home - - - diff --git a/MPSync/MPSync/bin/Release/Common.Utils.dll b/MPSync/MPSync/bin/Release/Common.Utils.dll deleted file mode 100644 index 73516a1..0000000 Binary files a/MPSync/MPSync/bin/Release/Common.Utils.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/Core.dll b/MPSync/MPSync/bin/Release/Core.dll deleted file mode 100644 index 6e311a8..0000000 Binary files a/MPSync/MPSync/bin/Release/Core.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/MPSync.dll b/MPSync/MPSync/bin/Release/MPSync.dll deleted file mode 100644 index c1dd389..0000000 Binary files a/MPSync/MPSync/bin/Release/MPSync.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/MPSync.dll.config b/MPSync/MPSync/bin/Release/MPSync.dll.config deleted file mode 100644 index e8a46ec..0000000 --- a/MPSync/MPSync/bin/Release/MPSync.dll.config +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MPSync/MPSync/bin/Release/MPSync.pdb b/MPSync/MPSync/bin/Release/MPSync.pdb deleted file mode 100644 index 119de00..0000000 Binary files a/MPSync/MPSync/bin/Release/MPSync.pdb and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/MPSync.xml b/MPSync/MPSync/bin/Release/MPSync.xml deleted file mode 100644 index a1bc859..0000000 --- a/MPSync/MPSync/bin/Release/MPSync.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - -MPSync - - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - If the plugin should have it's own button on the main menu of MediaPortal then it - should return true to this method, otherwise if it should not be on home - it should return false - - text the button should have - image for the button, or empty for default - image for the button, or empty for default - subpicture for the button or empty for none - true : plugin needs it's own button on home - false : plugin does not need it's own button on home - - - diff --git a/MPSync/MPSync/bin/Release/MPSync_Process.exe b/MPSync/MPSync/bin/Release/MPSync_Process.exe deleted file mode 100644 index a2fb586..0000000 Binary files a/MPSync/MPSync/bin/Release/MPSync_Process.exe and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/System.Data.SQLite.dll b/MPSync/MPSync/bin/Release/System.Data.SQLite.dll deleted file mode 100644 index f72b637..0000000 Binary files a/MPSync/MPSync/bin/Release/System.Data.SQLite.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/Utils.dll b/MPSync/MPSync/bin/Release/Utils.dll deleted file mode 100644 index f691d01..0000000 Binary files a/MPSync/MPSync/bin/Release/Utils.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/log4net.dll b/MPSync/MPSync/bin/Release/log4net.dll deleted file mode 100644 index 06e778c..0000000 Binary files a/MPSync/MPSync/bin/Release/log4net.dll and /dev/null differ diff --git a/MPSync/MPSync/bin/Release/plugins/process/MPSync.dll b/MPSync/MPSync/bin/Release/plugins/process/MPSync.dll deleted file mode 100644 index 5b72516..0000000 Binary files a/MPSync/MPSync/bin/Release/plugins/process/MPSync.dll and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/MPSync/MPSync/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 8cb40ff..0000000 Binary files a/MPSync/MPSync/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/MPSync.MPSync_settings.resources b/MPSync/MPSync/obj/Release/MPSync.MPSync_settings.resources deleted file mode 100644 index 36e0f59..0000000 Binary files a/MPSync/MPSync/obj/Release/MPSync.MPSync_settings.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/MPSync.Resources.resources b/MPSync/MPSync/obj/Release/MPSync.Resources.resources deleted file mode 100644 index 2441416..0000000 Binary files a/MPSync/MPSync/obj/Release/MPSync.Resources.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/MPSync.exe b/MPSync/MPSync/obj/Release/MPSync.exe deleted file mode 100644 index a76473a..0000000 Binary files a/MPSync/MPSync/obj/Release/MPSync.exe and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/MPSync.pdb b/MPSync/MPSync/obj/Release/MPSync.pdb deleted file mode 100644 index 8e71e90..0000000 Binary files a/MPSync/MPSync/obj/Release/MPSync.pdb and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/MPSync.vbproj.FileListAbsolute.txt b/MPSync/MPSync/obj/Release/MPSync.vbproj.FileListAbsolute.txt deleted file mode 100644 index d2aacd8..0000000 --- a/MPSync/MPSync/obj/Release/MPSync.vbproj.FileListAbsolute.txt +++ /dev/null @@ -1,27 +0,0 @@ -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\ResolveAssemblyReference.cache -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\MPSync.Resources.resources -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\MPSync.MPSync_settings.resources -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\ResGen.read.1.tlog -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\ResGen.write.1.tlog -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\MPSync.pdb -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\MPSync.xml -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\MPSync.xml -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\MPSync.pdb -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\MPSync.exe.config -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\MPSync.exe -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\obj\Release\MPSync.exe -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\System.Data.SQLite.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Common.Utils.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Core.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Utils.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Bass.Net.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\DirectShowLib.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\BassVisAPI.Net.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\taglib-sharp.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\AxInterop.WMPLib.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\edtftpnet-1.2.2.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\BassRegistration.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\MediaPortal.Support.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Interop.WMPLib.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\log4net.dll -E:\Rudolph\Documents\Visual Studio 2010\Projects\MPSync\MPSync\bin\Release\Ionic.Zip.dll diff --git a/MPSync/MPSync/obj/Release/MPSync.xml b/MPSync/MPSync/obj/Release/MPSync.xml deleted file mode 100644 index 4143869..0000000 --- a/MPSync/MPSync/obj/Release/MPSync.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - -MPSync - - - - - - Returns the cached ResourceManager instance used by this class. - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - If the plugin should have it's own button on the main menu of MediaPortal then it - should return true to this method, otherwise if it should not be on home - it should return false - - text the button should have - image for the button, or empty for default - image for the button, or empty for default - subpicture for the button or empty for none - true : plugin needs it's own button on home - false : plugin does not need it's own button on home - - - \ No newline at end of file diff --git a/MPSync/MPSync/obj/Release/ResGen.read.1.tlog b/MPSync/MPSync/obj/Release/ResGen.read.1.tlog deleted file mode 100644 index b7d5ef7..0000000 Binary files a/MPSync/MPSync/obj/Release/ResGen.read.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/ResGen.write.1.tlog b/MPSync/MPSync/obj/Release/ResGen.write.1.tlog deleted file mode 100644 index 2c4c4d5..0000000 Binary files a/MPSync/MPSync/obj/Release/ResGen.write.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/ResolveAssemblyReference.cache b/MPSync/MPSync/obj/Release/ResolveAssemblyReference.cache deleted file mode 100644 index 9725538..0000000 Binary files a/MPSync/MPSync/obj/Release/ResolveAssemblyReference.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/Release/TempPE/My Project.Resources.Designer.vb.dll b/MPSync/MPSync/obj/Release/TempPE/My Project.Resources.Designer.vb.dll deleted file mode 100644 index c4212fb..0000000 Binary files a/MPSync/MPSync/obj/Release/TempPE/My Project.Resources.Designer.vb.dll and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache b/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache deleted file mode 100644 index a916a56..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index c1d53f6..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.MPSync_settings.resources b/MPSync/MPSync/obj/x86/Debug/MPSync.MPSync_settings.resources deleted file mode 100644 index 24ef3f9..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/MPSync.MPSync_settings.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.Resources.resources b/MPSync/MPSync/obj/x86/Debug/MPSync.Resources.resources deleted file mode 100644 index 6ef25cf..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/MPSync.Resources.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.exe b/MPSync/MPSync/obj/x86/Debug/MPSync.exe deleted file mode 100644 index f196cc6..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/MPSync.exe and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.pdb b/MPSync/MPSync/obj/x86/Debug/MPSync.pdb deleted file mode 100644 index 0906c1d..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/MPSync.pdb and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.vbproj.FileListAbsolute.txt b/MPSync/MPSync/obj/x86/Debug/MPSync.vbproj.FileListAbsolute.txt deleted file mode 100644 index ea4943a..0000000 --- a/MPSync/MPSync/obj/x86/Debug/MPSync.vbproj.FileListAbsolute.txt +++ /dev/null @@ -1,68 +0,0 @@ -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.exe.config -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.exe -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.xml -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.Resources.resources -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.MPSync_settings.resources -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.GenerateResource.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.CoreCompileInputs.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.exe -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.xml -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbprojAssemblyReference.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Common.Utils.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Core.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync_DirectoryEnumerator.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Utils.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\log4net.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\DirectShowLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\CSScriptLibrary.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\System.Management.Automation.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\edtftpnet-1.2.2.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Microsoft.WindowsAPICodePack.Shell.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\taglib-sharp.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\CSCore.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Bass.Net.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\AxInterop.WMPLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Interop.WMPLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MediaPortal.Support.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\BassRegistration.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Microsoft.WindowsAPICodePack.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Ionic.Zip.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync_DirectoryEnumerator.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.CopyComplete -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\System.Data.SQLite.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.exe.config -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.exe -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.pdb -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync.xml -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Common.Utils.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Core.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync_DirectoryEnumerator.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\System.Data.SQLite.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Utils.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\log4net.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\DirectShowLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\CSScriptLibrary.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\System.Management.Automation.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\edtftpnet-1.2.2.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Microsoft.WindowsAPICodePack.Shell.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\taglib-sharp.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\CSCore.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Bass.Net.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\AxInterop.WMPLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Interop.WMPLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MediaPortal.Support.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\BassRegistration.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Microsoft.WindowsAPICodePack.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\Ionic.Zip.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Debug\MPSync_DirectoryEnumerator.pdb -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbprojAssemblyReference.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.Resources.resources -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.MPSync_settings.resources -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.GenerateResource.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.CoreCompileInputs.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.vbproj.CopyComplete -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.exe -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.xml -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Debug\MPSync.pdb diff --git a/MPSync/MPSync/obj/x86/Debug/MPSync.xml b/MPSync/MPSync/obj/x86/Debug/MPSync.xml deleted file mode 100644 index a1bc859..0000000 --- a/MPSync/MPSync/obj/x86/Debug/MPSync.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - -MPSync - - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - If the plugin should have it's own button on the main menu of MediaPortal then it - should return true to this method, otherwise if it should not be on home - it should return false - - text the button should have - image for the button, or empty for default - image for the button, or empty for default - subpicture for the button or empty for none - true : plugin needs it's own button on home - false : plugin does not need it's own button on home - - - diff --git a/MPSync/MPSync/obj/x86/Debug/ResGen.read.1.tlog b/MPSync/MPSync/obj/x86/Debug/ResGen.read.1.tlog deleted file mode 100644 index 70db8a6..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/ResGen.read.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/ResGen.write.1.tlog b/MPSync/MPSync/obj/x86/Debug/ResGen.write.1.tlog deleted file mode 100644 index 1a642de..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/ResGen.write.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/ResolveAssemblyReference.cache b/MPSync/MPSync/obj/x86/Debug/ResolveAssemblyReference.cache deleted file mode 100644 index e48ae10..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/ResolveAssemblyReference.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll b/MPSync/MPSync/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll deleted file mode 100644 index e7893ea..0000000 Binary files a/MPSync/MPSync/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache b/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache deleted file mode 100644 index fe5731f..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index dd6bf47..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/GenerateResource.read.1.tlog b/MPSync/MPSync/obj/x86/Release/GenerateResource.read.1.tlog deleted file mode 100644 index 26c1cea..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/GenerateResource.read.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/GenerateResource.write.1.tlog b/MPSync/MPSync/obj/x86/Release/GenerateResource.write.1.tlog deleted file mode 100644 index c61a23b..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/GenerateResource.write.1.tlog and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.MPSync_settings.resources b/MPSync/MPSync/obj/x86/Release/MPSync.MPSync_settings.resources deleted file mode 100644 index 24ef3f9..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.MPSync_settings.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.Resources.resources b/MPSync/MPSync/obj/x86/Release/MPSync.Resources.resources deleted file mode 100644 index 6ef25cf..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.Resources.resources and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.dll b/MPSync/MPSync/obj/x86/Release/MPSync.dll deleted file mode 100644 index c1dd389..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.dll and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.pdb b/MPSync/MPSync/obj/x86/Release/MPSync.pdb deleted file mode 100644 index 119de00..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.pdb and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.CoreCompileInputs.cache b/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.CoreCompileInputs.cache deleted file mode 100644 index 9906568..0000000 --- a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -3a887052670dcd50041d8297abb6e0ea64a3b8ea diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.FileListAbsolute.txt b/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.FileListAbsolute.txt deleted file mode 100644 index 4ed60cf..0000000 --- a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.FileListAbsolute.txt +++ /dev/null @@ -1,68 +0,0 @@ -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.xml -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.Resources.resources -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.MPSync_settings.resources -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.GenerateResource.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.CoreCompileInputs.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.xml -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbprojAssemblyReference.cache -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.dll.config -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Common.Utils.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Core.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync_DirectoryEnumerator.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\System.Data.SQLite.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Utils.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\log4net.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\DirectShowLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\CSScriptLibrary.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\System.Management.Automation.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\edtftpnet-1.2.2.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Microsoft.WindowsAPICodePack.Shell.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\taglib-sharp.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\CSCore.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Bass.Net.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\AxInterop.WMPLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Interop.WMPLib.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MediaPortal.Support.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\BassRegistration.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Microsoft.WindowsAPICodePack.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Ionic.Zip.dll -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync_DirectoryEnumerator.pdb -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.CopyComplete -E:\Users\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.pdb -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.xml -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Common.Utils.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Core.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync_DirectoryEnumerator.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\System.Data.SQLite.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Utils.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\log4net.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\DirectShowLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\CSScriptLibrary.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\System.Management.Automation.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\edtftpnet-1.2.2.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Microsoft.WindowsAPICodePack.Shell.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\taglib-sharp.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\CSCore.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Bass.Net.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\AxInterop.WMPLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Interop.WMPLib.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MediaPortal.Support.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\BassRegistration.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Microsoft.WindowsAPICodePack.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\Ionic.Zip.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync_DirectoryEnumerator.pdb -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.Resources.resources -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.MPSync_settings.resources -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.GenerateResource.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.CoreCompileInputs.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbproj.CopyComplete -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.xml -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.pdb -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.vbprojAssemblyReference.cache -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.dll.config -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\bin\Release\MPSync.dll -D:\Rudolph\Documents\Visual Studio 2017\Projects\MPSync\MPSync\obj\x86\Release\MPSync.dll diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.GenerateResource.Cache b/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.GenerateResource.Cache deleted file mode 100644 index a7dd65d..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.vbproj.GenerateResource.Cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.vbprojAssemblyReference.cache b/MPSync/MPSync/obj/x86/Release/MPSync.vbprojAssemblyReference.cache deleted file mode 100644 index 2d111e3..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.vbprojAssemblyReference.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.vbprojResolveAssemblyReference.cache b/MPSync/MPSync/obj/x86/Release/MPSync.vbprojResolveAssemblyReference.cache deleted file mode 100644 index e2378fa..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/MPSync.vbprojResolveAssemblyReference.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/MPSync.xml b/MPSync/MPSync/obj/x86/Release/MPSync.xml deleted file mode 100644 index a1bc859..0000000 --- a/MPSync/MPSync/obj/x86/Release/MPSync.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - -MPSync - - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - Looks up a localized resource of type System.Drawing.Bitmap. - - - - - If the plugin should have it's own button on the main menu of MediaPortal then it - should return true to this method, otherwise if it should not be on home - it should return false - - text the button should have - image for the button, or empty for default - image for the button, or empty for default - subpicture for the button or empty for none - true : plugin needs it's own button on home - false : plugin does not need it's own button on home - - - diff --git a/MPSync/MPSync/obj/x86/Release/ResGen.read.1.tlog b/MPSync/MPSync/obj/x86/Release/ResGen.read.1.tlog deleted file mode 100644 index 46b134b..0000000 --- a/MPSync/MPSync/obj/x86/Release/ResGen.read.1.tlog +++ /dev/null @@ -1 +0,0 @@ -ÿþ \ No newline at end of file diff --git a/MPSync/MPSync/obj/x86/Release/ResGen.write.1.tlog b/MPSync/MPSync/obj/x86/Release/ResGen.write.1.tlog deleted file mode 100644 index 46b134b..0000000 --- a/MPSync/MPSync/obj/x86/Release/ResGen.write.1.tlog +++ /dev/null @@ -1 +0,0 @@ -ÿþ \ No newline at end of file diff --git a/MPSync/MPSync/obj/x86/Release/ResolveAssemblyReference.cache b/MPSync/MPSync/obj/x86/Release/ResolveAssemblyReference.cache deleted file mode 100644 index ff57234..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/ResolveAssemblyReference.cache and /dev/null differ diff --git a/MPSync/MPSync/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll b/MPSync/MPSync/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll deleted file mode 100644 index 1bed009..0000000 Binary files a/MPSync/MPSync/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll and /dev/null differ diff --git a/MPSync/MPSync/packages.config b/MPSync/MPSync/packages.config new file mode 100644 index 0000000..df9958e --- /dev/null +++ b/MPSync/MPSync/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/MPSync/MPSync_DirectoryEnumerator.sln b/MPSync/MPSync_DirectoryEnumerator.sln deleted file mode 100644 index be02753..0000000 --- a/MPSync/MPSync_DirectoryEnumerator.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27428.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectoryEnumerator", "FastDirectoryEnumerator\DirectoryEnumerator.csproj", "{B178092B-06CF-4FCF-9D20-69E14650136F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B178092B-06CF-4FCF-9D20-69E14650136F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B178092B-06CF-4FCF-9D20-69E14650136F}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {98F054CA-82D0-46E9-8496-BAAFFD564949} - EndGlobalSection -EndGlobal diff --git a/MPSync/MPSync_update.xml b/MPSync/MPSync_update.xml deleted file mode 100644 index 36e0db8..0000000 --- a/MPSync/MPSync_update.xml +++ /dev/null @@ -1,2409 +0,0 @@ - - - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - requires MediaPortal version 1.1.6.27644 to 1.1.6.27644. - MediaPortal - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 1 - 5 - 1 - 1487 - - true - requires Moving Pictures version 1.5.1.1487 - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 3 - 4 - 2 - 2018 - - true - requires MP-TVSeries version 3.4.2.2018 - MP-TVSeries - - - - - - - - - - 1.1.6.27644 - 1.2.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 0 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Stable release - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.0.mpe1 - 2013-04-06T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1889.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1900.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1901.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1902.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1895.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1898.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1886.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - requires MediaPortal version 1.1.6.27644 to 1.1.6.27644. - MediaPortal - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 1 - 5 - 1 - 1487 - - true - requires Moving Pictures version 1.5.1.1487 - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 3 - 4 - 2 - 2018 - - true - requires MP-TVSeries version 3.4.2.2018 - MP-TVSeries - - - - - - - - - - 1.1.6.27644 - 1.2.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 1 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Stable release - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.1.mpe1 - 2013-04-08T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1889.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1900.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1901.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1902.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1895.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1898.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1886.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - requires MediaPortal version 1.1.6.27644 to 1.1.6.27644. - MediaPortal - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 1 - 5 - 1 - 1487 - - true - requires Moving Pictures version 1.5.1.1487 - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 3 - 4 - 2 - 2018 - - true - requires MP-TVSeries version 3.4.2.2018 - MP-TVSeries - - - - - - - - - - 1.1.6.27644 - 1.2.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 2 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Stable release - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.2.mpe1 - 2013-04-09T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1889.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1900.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1901.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1902.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1895.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1898.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1914.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1886.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - requires MediaPortal version 1.1.6.27644 to 1.1.6.27644. - MediaPortal - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 1 - 5 - 1 - 1487 - - true - requires Moving Pictures version 1.5.1.1487 - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 3 - 4 - 2 - 2018 - - true - requires MP-TVSeries version 3.4.2.2018 - MP-TVSeries - - - - - - - - - - 1.1.6.27644 - 1.2.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 3 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Stable release - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.3.mpe1 - 2013-04-10T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1889.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1900.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1901.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1902.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1895.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1898.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1914.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1886.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 6 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Enhanced synchronization to be based on database triggers resulting in faster synchronization and also less load on HTPC CPU. - -Compatibility with MediaPortal v1.4.0 - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.6.mpe1 - 2013-05-19T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1889.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1900.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1901.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1902.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1895.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1898.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1914.jpg,http://www.team-mediaportal.com/components/com_mtree/img/listings/m/1886.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - - - 1.1.6.27644 - 1.3.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 7 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Enhanced synchronization to be based on database triggers resulting in faster synchronization and also less load on HTPC CPU. - -Compatibility with MediaPortal v1.4.0 - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.7.mpe1 - 2013-05-21T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - - - 1.1.6.27644 - 1.3.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 8 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.8.mpe1 - 2013-05-24T23:39:41 - synchronization, database, thumbs - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - - - 1.1.6.27644 - 1.3.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 9 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - - Stable - https://cdbsync-plugin.googlecode.com/files/MPSync-v1.0.0.9.mpe1 - 2013-08-21T23:39:41 - synchronization, database, thumbs, any folder you set up. - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - - - 1.1.6.27644 - 1.3.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 10 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2014-04-27T23:39:41 - synchronization, database, thumbs, any folder you set up. - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - true - This version of MPSync requires MediaPortal 1.2.0 Beta or higher! - MediaPortal - - - - - - - - - - 1.1.6.27644 - 1.3.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 11 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2014-05-02T23:39:41 - synchronization, database, thumbs, any folder you set up. - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. - MediaPortal - - - - - - - - - - 1.6.100.0 - 1.6.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 13 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Minor fixes. - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2015-02-21T23:39:41 - synchronization, database, thumbs, any folder you set up. - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. - MediaPortal - - - - - - - - - - 1.6.100.0 - 1.6.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - https://cdbsync-plugin.googlecode.com/svn/trunk/MPSync/MPSync_update.xml - - 1 - 0 - 0 - 14 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Minor fixes. - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2015-02-28T23:39:41 - synchronization, database, thumbs, any folder you set up. - E:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. - MediaPortal - - - - - - - - - - 1.6.100.0 - 1.6.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=52 - - 1 - 0 - 0 - 17 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Added file size as part of the criteria for synchronization. - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2016-03-22T23:39:41 - synchronization, database, thumbs, any folder you set up. - D:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. - MediaPortal - - - - - - - - - - 1.6.100.0 - 1.6.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=52 - - 1 - 0 - 0 - 21 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - 1.Faster directory scanning for Folder Synchronisation. -2.Possibility to limit threads for background synchronisation to reduce Memory and CPU utilisation. -3.Ability to remove folders from target drive if these do not exist on source. - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2018-06-23T23:39:41 - synchronization, database, thumbs, any folder you set up. - D:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - 2.0 - - - - Default - true - Default - - - - - - SQLite - true - SQLite - - - - - - - - - - - - - Extension - 284fc21c-86e3-4346-bf31-9e38c75e0242 - - 1 - 5 - 1 - 1487 - - - 9 - 9 - 9 - 9 - - true - requires Moving Pictures version 1.5.1.1487 or higher - Moving Pictures - - - Extension - 5e2777c3-966c-407f-b5a9-e51205b70b3e - - 3 - 4 - 2 - 2018 - - - 9 - 9 - 9 - 9 - - true - requires MP-TVSeries version 3.4.2.2018 or higher - MP-TVSeries - - - MediaPortal - - - 1 - 1 - 6 - 27644 - - - 1 - 1 - 6 - 27644 - - false - This version of MPSync is only compatible with MediaPortal 1.7 or greater. Please download version that is supported by your version of MediaPortal from the MPSync homepage. - MediaPortal - - - - - - - - - - 1.6.100.0 - 1.6.100.0 - - - - - - - - - - - - - - MPSync - 8ddbfb53-7222-41fd-a139-407eacd78464 - m3rcury - http://www.team-mediaportal.com/extensions/utilities/cdb-sync?lang=en - http://forum.team-mediaportal.com/threads/plugin-mpsync-mediaportal-synchronization.117417/#post-975411 - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=52 - - 1 - 0 - 0 - 22 - - This plugin synchronizes your MediaPortal databases with a central database as well as thumbs folder, so that any additons can by automatically applied to any other MP seat you might have in your household. - Added some more logging and minor bug fixing - Stable - http://www.team-mediaportal.com/index.php?option=com_mtree&task=att_download&link_id=268&cf_id=24 - 2018-09-23T23:39:41 - synchronization, database, thumbs, any folder you set up. - D:\Software\MediaPortal\MPSync\[Name]-v[Version].mpe1 - - - - - String - The icon file of the package stored online (jpg,png,bmp) - - - - Template - The file used to configure the extension. - If have .exe extension the will be executed - If have .dll extension used like MP plugin configuration - - - http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(1)%20MPSync_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(2)%20MPSync_database_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(3)%20MPSync_database_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(4)%20MPSync_database_other.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(5)%20MPSync_database_watched_status.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(6)%20MPSync_folder_list.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(7)%20MPSync_thumbs_paths.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(8)%20MPSync_thumbs_advanced_settings.jpg;http://cdbsync-plugin.googlecode.com/svn/wiki/screens/(9)%20MPSync_status.jpg - String - Online stored screenshot urls separated by ; - - - YES - Bool - Show dialog and force to uninstall previous version when updating an extension. Should only be disabled if you are using an NSIS/MSI installer. - - - - - - - - - - - false - - - \ No newline at end of file diff --git a/MPSync_Launcher/MPSync_Launcher.sln b/MPSync_Launcher/MPSync_Launcher.sln deleted file mode 100644 index 22c1867..0000000 --- a/MPSync_Launcher/MPSync_Launcher.sln +++ /dev/null @@ -1,28 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2013 for Windows Desktop -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MPSync_Launcher", "MPSync_Launcher\MPSync_Launcher.csproj", "{F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|Any CPU.ActiveCfg = Release|Any CPU - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|Any CPU.Build.0 = Release|Any CPU - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x86.ActiveCfg = Debug|x86 - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Debug|x86.Build.0 = Debug|x86 - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|Any CPU.Build.0 = Release|Any CPU - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x86.ActiveCfg = Release|x86 - {F8303E7F-DDB0-49AD-B960-B6B7CA00C6E1}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/MPSync_Launcher/MPSync_Launcher.v12.suo b/MPSync_Launcher/MPSync_Launcher.v12.suo deleted file mode 100644 index 0920d6e..0000000 Binary files a/MPSync_Launcher/MPSync_Launcher.v12.suo and /dev/null differ diff --git a/MPSync_Launcher/MPSync_Launcher/MPSync_Launcher.csproj b/MPSync_Launcher/MPSync_Launcher/MPSync_Launcher.csproj index 878eaac..ff842fa 100644 --- a/MPSync_Launcher/MPSync_Launcher/MPSync_Launcher.csproj +++ b/MPSync_Launcher/MPSync_Launcher/MPSync_Launcher.csproj @@ -10,7 +10,7 @@ Properties MPSync_Launcher MPSync_Launcher - v4.0 + v4.7.2 512 @@ -33,37 +33,40 @@ false true - + true - full - false - bin\Debug\ + bin\Debug\x64\ DEBUG;TRACE + full + x64 + 7.3 prompt - 4 - - pdbonly - true - bin\Release\ + + bin\Release\x64\ TRACE + true + pdbonly + x64 + 7.3 prompt - 4 - + true - bin\x86\Debug\ + bin\Debug\x86\ DEBUG;TRACE full x86 + 7.3 prompt - - bin\Release\ + + bin\Release\x86\ TRACE true pdbonly x86 + 7.3 prompt @@ -74,14 +77,14 @@ MPSync.ico - + False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Common.Utils.dll + ..\..\External\Common.Utils.dll - + False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Core.dll - False + ..\..\External\Core.dll + True False @@ -99,9 +102,9 @@ - + False - C:\Program Files (x86)\Team MediaPortal\MediaPortal\Utils.dll + ..\..\External\Utils.dll @@ -155,6 +158,12 @@ + + + {c23857f2-6ba9-4fa4-9d15-b535c5c41564} + MPSync + +